Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按小时分组-指定开始的分钟数_Sql_Sql Server_Sql Server 2008_Group By - Fatal编程技术网

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部分。