2015-12-02 72 views
-1

我的交易与TRANSACTIONTIME列的表:的SQLServer 2008 - 时间范围组

enter image description here

如何编写一个查询,让我的交易数量在某些之间发生了一天时间段。例如,从早上9点到晚上9点,间隔3小时?

样本输出:

enter image description here

+0

你的例子没有意义 - 段是什么? – Hogan

+0

到目前为止您尝试了什么查询?基本上你需要做的是计算它落入和分组的时间间隔。 – Rabbit

+0

您可以使用ROW_NUMBER()OVER(PARTITION BY ...)生成“Segment”列。 –

回答

0

不太清楚你想做的事,但是这应该让你开始 - 总计按小时细分的列表:

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

如果你想每3小时一次,然后使用HOUR(TransactionTime)/3为您的团队 - 就像平常一样。

0

感谢您的所有输入。我推导出以下解决方案:

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);