我有一个如下所示的表:
eventId activity timestamp
1 0 2012-10-22 20:10:00
2 0 2012-10-22 20:10:20
3 1 2012-10-22 20:11:25
4 1 2012-10-22 20:12:20
5 1 2012-10-22 20:12:22
6 0 2012-10-22 20:12:30 <--
7 1 2012-10-22 20:12:25 <--
8 0 2012-10-22 20:14:46
9 0 2012-10-22 20:14:48
10 1 2012-10-22 20:15:45
11 0 2012-10-22 20:16:00
12 0 2012-10-22 20:17:00
13 0 2012-10-22 20:17:13
我想删除活动为 0 且不按时间顺序与活动为 1 的行相邻的每一行。因此,在此示例中,我将删除 eventID 为 1、8、12 和 13 的行。事件可能异步插入到表中,如第 6 行和第 7 行所示。
我知道我可以通过检查每一行并发出查询以将其删除(如果它符合我的条件)来循环执行此操作,但这非常低效。我想知道是否可以在一个查询中完成所有这些操作。
好像我可以做类似的事情
delete from mytable
where activity = 0
and (rownumber()+1).activity = 0
and (rownumber()-1).activity = 0
order by timestamp
这很简单,但我认为这样的功能是不可能的。