我使用的是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排序?
谢谢
答案 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 )
我假设您的列名实际上不是rowid
和date
,因为这些是保留字。我正在使用id
和dt
。