Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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
SQLServer2008-按时间范围分组_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

SQLServer2008-按时间范围分组

SQLServer2008-按时间范围分组,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个带有TransactionTime列的事务表: 我如何编写一个查询,该查询为我提供一天中在特定时间段之间发生的事务数。例如,从上午9:00开始到晚上9:00,间隔3小时 样本输出: 不清楚您想做什么,但这应该可以让您开始——一份按小时细分的总数列表: SELECT HOUR(TransactionTime), COUNT(*) AS Num_Transactions FROM YOUR_TABLE_NAME GROUP BY HOUR(TransactionTime) 如果您希望每3

我有一个带有TransactionTime列的事务表:

我如何编写一个查询,该查询为我提供一天中在特定时间段之间发生的事务数。例如,从上午9:00开始到晚上9:00,间隔3小时

样本输出:


不清楚您想做什么,但这应该可以让您开始——一份按小时细分的总数列表:

SELECT HOUR(TransactionTime), COUNT(*) AS Num_Transactions
FROM YOUR_TABLE_NAME
GROUP BY HOUR(TransactionTime)

如果您希望每3小时使用一次,请使用
HOUR(TransactionTime)/3
作为您的分组,就像正常情况一样。

谢谢您的所有输入。我得出了以下解决方案:

SELECT Datename(weekday, time)              AS weekday,
   ( ( Datepart(hour, time) / 3 ) - 3 ) AS segment,
   Count(*)                             AS num_transactions
FROM   "transaction"
GROUP  BY Datename(weekday, time),
          ( ( Datepart(hour, time) / 3 ) - 3 )
ORDER  BY CASE Datename(weekday, time)
            WHEN 'Monday' THEN 1
            WHEN 'Tuesday' THEN 2
            WHEN 'Wednesday' THEN 3
            WHEN 'Thursday' THEN 4
            WHEN 'Friday' THEN 5
            WHEN 'Saturday' THEN 6
            WHEN 'Sunday' THEN 7
          END,
          ( ( Datepart(hour, time) / 3 ) - 3 );

您的示例没有意义——什么是段?到目前为止您尝试了什么查询?基本上,您需要做的是计算它所属的间隔并对其进行分组。您可以使用ROW_NUMBER()OVER(PARTITION BY…)生成
列。