按日期时间范围对

时间:2017-10-07 09:58:34

标签: sql-server

我正在使用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

有人能指出我正确的方向吗?

感谢。

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