我正在使用SQL Server 2012 Express,我想将以下数据分组,并在第二天的22:00到22:00之间的24个时段进行分组。日期和时间可以是任何东西,并且可以在5年的时间内返回数千条记录。原始数据来自:
Time BETWEEN '2017-08-01 22:00'AND '2017-08-03 22:00'
数据如下:
Time Duration
-----------------------------------
2017-08-01 22:00:22.000 4
2017-08-01 23:00:40.000 18
2017-08-02 05:14:57.000 3
2017-08-02 05:17:47.000 4
2017-08-02 21:18:22.000 156
2017-08-02 23:18:23.000 3
2017-08-03 06:18:35.000 13
2017-08-03 11:21:30.000 9
2017-08-03 13:23:43.000 3
2017-08-03 23:24:02.000 1
预期结果如下:
StartTime EndTime TotalDuration
----------------------------------------------------
2017-08-01 22:00 2017-08-02 22:00 185
2017-08-02 22:00 2017-08-03 22:00 28
2017-08-03 22:00 2017-08-04 22:00 1
有人能指出我正确的方向吗?
感谢。
答案 0 :(得分:1)
您可以使用
SELECT StartTime = DATEADD(HOUR, -2, Date),
EndTime = DATEADD(HOUR, 22, Date),
TotalDuration = SUM(Duration)
FROM YourTable
CROSS APPLY (VALUES(CAST(CAST(DATEADD(HOUR, 2, Time) AS DATE)AS DATETIME))) V(Date)
GROUP BY Date