我有一个查询可以获取特定日期的数据并按小时分组:
SELECT id, timetag
FROM table
-- rest of long query
-- rest of long query
GROUP BY DATEPART(YEAR, timetag), DATEPART(MONTH, timetag), DATEPART(DAY, timetag), DATEPART(HOUR, timetag)
并且工作正常。 但是可以指定小时开始的时间吗?被检索的数据以15分钟为增量,即有12:00,12:15,12:30,12:45,13:00,13:15的数据,依此类推。因此,当它按小时分组时,它将数据分组为12:00,12:15,12:30和12:45,然后分组为13:00,13:15,13:30和13:45,依此类推。我想按小时对数据进行分组,但是从小时的15分钟开始,所以分组将是12:15,12:30,12:45和13:00,然后下一个分组将从13:15开始等等。
有办法做到这一点吗?
使用SQL Server 2008。
答案 0 :(得分:1)
您可以通过减去15分钟并将其用于分组来完成此操作:
SELECT DATEPART(YEAR, new_timetag),
DATEPART(MONTH, new_timetag),
DATEPART(DAY, new_timetag),
DATEPART(HOUR, new_timetag),
COUNT(*)
FROM (SELECT t.*, dateadd(minute, -15, timetag) as new_timetag
FROM table t
) t
-- rest of long query
-- rest of long query
GROUP BY DATEPART(YEAR, new_timetag),
DATEPART(MONTH, new_timetag),
DATEPART(DAY, new_timetag),
DATEPART(HOUR, new_timetag);
因为减去15分钟可以影响所有日期/时间部分,我将其移动到子查询,因此代码只有一次。