按小时分组 - 指定开始的分钟

时间:2015-02-03 12:33:23

标签: sql sql-server sql-server-2008 group-by

我有一个查询可以获取特定日期的数据并按小时分组:

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。

1 个答案:

答案 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分钟可以影响所有日期/时间部分,我将其移动到子查询,因此代码只有一次。