总结由三个字段分组的每三个记录

时间:2017-01-19 17:31:51

标签: sql-server group-by sum

我有一个数据库,其中旅行时间按时期划分,并在5分钟的垃圾箱中完成,我需要总计最多15分钟。这很棘手,因为数据是按TMC值,日期和时期划分的。这些都不是唯一的。就这样:

TMC         DATE    EPOCH   Travel_TIME_ALL_VEHICLES
111N20176   7012015 64      63
111N20176   7012015 76      112
111N20176   7012015 80      114
111N20176   7012015 83      127
111N20176   7012015 91      58
111N20176   7012015 93      117

我需要将前三个旅行时间加在一起,然后是接下来的三个,然后是接下来的三个,依此类推。

select *, sum(Travel_TIME_ALL_VEHICLES) over (order by EPOCH rows between 3 preceding and current row) as rolling_avg 
 from [dbo].[FHWA_2015_weekend] 
 WHERE TMC = '113P12373' order by DATE, EPOCH

1 个答案:

答案 0 :(得分:0)

在MySQL中(因为问题最初被标记),您可以使用变量枚举数据,然后进行聚合。

对于您的样本数据,这应该有效:

select tmc, date, sum(Travel_TIME_ALL_VEHICLES)
from (select t.*, (@rn := @rn + 1) as rn
      from t cross join
           (select @rn := 0) params
      order by date, epoch
     ) t
group by tmc, date, floor((@rn - 1) / 3);

在几乎任何其他数据库中,您都会使用row_number()来实现此目的:

select tmc, date, sum(Travel_TIME_ALL_VEHICLES)
from (select t.*, row_number() over (order by date, epoch) as rn
      from t
     ) t
group by tmc, date, floor((rn - 1) / 3);