Oracle SQL Developer比较行

时间:2014-03-31 14:58:24

标签: sql database oracle

我使用的是Oracle SQL Developer,版本4.0.0.13,Build MAIN-13.80

我有一个有趣的问题,我的查询返回给我大量的数据优先级(1到4)和日期/时间。 我必须完成的是从表中删除优先级为4的所有行,并且发生的下一个事件是从上一个优先级为1-3的5分钟时间范围内。

可能听起来很混乱,但请看下面的数据

           Date            Priority 
 - 2013-03-28 21:42:08        4 

 - 2013-03-28 21:45:20        1

 - 2013-03-28 21:45:16        1 

 - 2013-03-28 21:46:37        1

所以从这里开始,我想删除第一行,因为它具有优先级4,因为下一个事件发生在5分钟的时间范围内,它在(1,2,3)中。 如果下一行也是优先级4,我们只是忽略它并继续前进。

在表格中我有Date,Priority和RowID列,那么如何在优先级4之后检查行并比较日期以查看5分钟差异,当然所有内容都按日期asc排序?

谢谢

1 个答案:

答案 0 :(得分:2)

听起来你想要像

这样的东西
DELETE FROM table_name a
 WHERE priority = 4
   AND EXISTS( SELECT 1
                 FROM table_name b
                WHERE b.priority IN (1,2,3)
                  AND b.id != a.id
                  AND b.dt BETWEEN a.dt AND a.dt + interval '5' minute )

我假设您的列名实际上不是rowiddate,因为这些是保留字。我正在使用iddt