按不同的时间间隔进行聚合的一种方法是使用 DATEADD
和 DATEDIFF
:
SELECT
COUNT(*) as '#Calls',
DATEADD(minute, (DATEDIFF(minute, '', date_time) / 30) * 30, '') as Call_Interval
FROM dbo.My_Table
GROUP BY DATEADD(minute, (DATEDIFF(minute, '', date_time) / 30) * 30, '')
ORDER BY Call_Interval;
顺便提一下,上面的空字符串常量表示datetime
的默认值。 datetime
和其他时间类型的默认值如下所示,以ISO 8601字符串格式表示:
数据类型 | 默认值 |
---|---|
date | 1900-01-01 |
datetime | 1900-01-01T00:00:00 |
datetime2 | 1900-01-01T00:00:00 |
datetimeoffset | 1900-01-01T00:00:00+00:00 |
smalldatetime | 1900-01-01T00:00:00 |
time | 00:00:00 |
使用比minute
更精细的日期部分(例如second
、millisecond
和microsecond
)进行时间间隔计算可能需要比默认值(例如2020-01-01T00:00:00
)更新的基础日期时间值,以避免溢出。