我想要一个选择查询: 我有两列 - NUMBER(= row_number())和ActionTime(datetime) 专栏"结果" - 这就是我需要的。
如何获得结果:
取第一行,如果有一行距离当前不超过10秒,则枚举它 - 1
取以下无编号行并重复步骤1
查看示例:
NUMBER --- ActionTime --- Result
1 2016-04-15 15:43:58.387 1
2 2016-04-15 15:44:09.413 2
3 2016-04-15 15:44:20.470 3
4 2016-04-15 15:44:26.520 3
5 2016-04-15 15:44:32.567 4
6 2016-04-15 15:44:35.600 4
7 2016-04-15 15:44:38.657 4
答案 0 :(得分:0)
您可以在SQL Server 2012+中执行此操作,方法是使用LAG()
查找新组的开始位置,然后查看累计总和:
select e.number, e.actiontime,
sum(case when prev_at > dateadd(second, 10, actiontime)
then 0 else 1
end) over (order by actiontime) as Result
from (select e.*, lag(actiontime) over (order by actiontime) as prev_at
from example e
) e;
在早期版本中,您可以使用outer apply
执行类似操作,但性能通常不太好。