2016-04-15 190 views
0

我想要一个选择查询: 我有两列 - NUMBER(= row_number())和ActionTime(日期时间) 列“结果” - 这是我需要得到的。SQL Server。选择日期范围查询

如何获得结果:

  1. 采取的第一行,如果有行中,从目前不超过10秒,列举了 - 1

  2. 采取以下门牌线然后重复执行步骤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

您可以通过使用LAG()寻找到新的群体开始在SQL Server 2012+做到这一点,那么的累加值:

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类似的东西,但性能一般不太好。