我有一张表格显示:Power
,Time
,Diff-Days
,Diff-Hours
,Diff-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
答案 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”开始,那么只需在值中添加一个。