在下表中,我想删除或更新第二行(2,3,100,test2),当且仅当是会话的最后一行(100)时。
例如,可以修改第三行,因为它是按session_id = 100分组的最后一行,但不应删除/更新第一行和第二行。
我怎样才能提高效率呢?
您可以在下面的架构中看到的ID列是一个始终增加的自动生成的数字。
您可以在下面找到我的架构:
{{1}}
答案 0 :(得分:0)
您可以使用以下方法删除行:
LEFT JOIN (SELECT DISTINCT h.brnd_fmly_desc_txt, h.brnd_fmly_id
FROM ext_ce.hero_brands_list h
GROUP BY h.brnd_fmly_desc_txt, h.brnd_fmly_id) AS hl
on c.brnd_fmly_id = hl.brnd_fmly_id
类似的逻辑可以用于delete from test_t t
where t.session_id = 100 and
t.id = (select max(t2.id) from test_t t2 where t2.session_id = t.session_id);
。
答案 1 :(得分:0)
具有最大价值的父母是最后一位父母吗?如果是这样,您可以尝试使用下面的代码
DELETE FROM test_t b
WHERE EXISTS (SELECT *
FROM (SELECT A.*, MAX(parent) KEEP (DENSE_RANK LAST ORDER BY parent) OVER (PARTITION BY session_id) last_parent
FROM TEST_T A) a
WHERE a.last_parent = b.parent
and a.session_id = b.session_id)
或者,您可以使用LAST_VALUE函数,下面的示例查询
SELECT A.*, last_value(parent) OVER (order by session_id) last_value
FROM TEST_T A
ORDER BY SESSION_ID, PARENT DESC