删除具有多个条件的不同行

时间:2017-12-13 09:24:14

标签: sql database oracle

我试图删除数据库中的某些行,并且我阻止了我的请求。我要删除这些行的表格如下:

enter image description here

在这个例子中,我必须删除行号。 1和5。 请求必须是这样的,行是msg_id组中的最后一行(相同的msg_id)。最后一个由" A"给出。要删除此行,请在同一组msg_id中,以及同一个msg_id的行之间," B"必须具有相同的价值,但" D"必须是不同的。我希望我的解释清楚。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

DELETE
FROM   my_table AS tab1
WHERE  EXISTS (SELECT *
               FROM   my_table tab2
               WHERE  tab1.msg_id = tab2.msg_id
                 AND  tab1.A > tab2.A
                 AND  tab1.B = tab2.B
                 AND  tab1.C <> tab2.C)
  AND  NOT EXISTS (SELECT *
                   FROM   my_table tab3
                   WHERE  tab1.msg_id = tab3.msg_id
                     AND  tab1.A < tab3.A
                     AND  tab1.B = tab3.B
                     AND  tab1.C <> tab3.C);