Sql 按小时分组-指定开始的分钟数
我有一个查询,它获取特定日期的数据并按小时分组:Sql 按小时分组-指定开始的分钟数,sql,sql-server,sql-server-2008,group-by,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:
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分钟会影响所有的日期/时间部分,所以我将其移动到子查询中,以便代码只包含一次。如果不进行分组,则无法选择
id
或timetag
them@Andomar . . . 谢谢。您发布的查询应该会出现错误,如列“id”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。
True,我没有注意select,只是快速键入它,因为它是我所关注的查询的GROUP BY部分。