SQL Server。选择日期范围查询

时间:2016-04-15 13:50:30

标签: sql sql-server datetime

我想要一个选择查询: 我有两列 - NUMBER(= row_number())和ActionTime(datetime) 专栏"结果" - 这就是我需要的。

如何获得结果:

  1. 取第一行,如果有一行距离当前不超过10秒,则枚举它 - 1

  2. 取以下无编号行并重复步骤1

  3. 查看示例:

    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
    

1 个答案:

答案 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执行类似操作,但性能通常不太好。