按小时分组 - 指定开始的分钟
Group by hour - specifying the minute to start at
我有一个获取特定日期数据并按小时分组的查询:
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。
您可以减去 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 分钟会影响所有 date/time 部分,所以我将它移到了子查询中,因此代码只有一次。
我有一个获取特定日期数据并按小时分组的查询:
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。
您可以减去 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 分钟会影响所有 date/time 部分,所以我将它移到了子查询中,因此代码只有一次。