添加按时间分组数据的列

时间:2016-07-04 13:36:47

标签: sql-server grouping datediff

我有一张表格显示:PowerTimeDiff-DaysDiff-HoursDiff-Minutes,其中差异列使用{{ 1}}和datediff计算行之间的时间差。

lag

我想要的是第6列,它将这些行分组为连续发生的事件,即每隔1分钟发生9次,在第6列中有1次,然后可能有2小时差异,然后是6行发生在彼此之后可能在第6列中有2个,这可能吗?

(PowerkW) (Time)               (Diff-Days) (Diff-Hours) (Diff-Minutes)   
 31011.39  2014-01-01 00:30:00  NULL        NULL         NULL  
 31838.74  2014-01-01 00:40:00  0           0            -10  
 32356.35  2014-01-01 00:50:00  0           0            -10  
 32358.82  2014-01-01 01:00:00  0           -1           -10  
 32414.15  2014-01-01 01:10:00  0           0            -10  
 32413.81  2014-01-01 01:20:00  0           0            -10  
 32412.35  2014-01-01 01:30:00  0           0            -10  
 32416.23  2014-01-01 01:40:00  0           0            -10  
 32014.94  2014-01-01 01:50:00  0           0            -10  
 31184.45  2014-01-01 03:40:00  0           -2           -110  
 32403.38  2014-01-01 03:50:00  0           0            -10  
 32415.07  2014-01-01 04:00:00  0           -1           -10  
 32388.04  2014-01-01 04:10:00  0           0            -10  
 32320.70  2014-01-01 04:20:00  0           0            -10  
 32297.44  2014-01-01 04:30:00  0           0            -10

1 个答案:

答案 0 :(得分:1)

如果你的连续定义是基于“差异分钟”大于某个值(或者小于,假设它们是负数),那么你可以使用累积和:

with q as (<your query here>)
select q.*,
       sum(case when diff_minutes < -50 then 1 else 0 end) over (order by time) as grp
from q;

如果你真的想从“1”开始,那么只需在值中添加一个。