TSQL组由下午3点到下午3点的时间间隔

问题描述:

我想今年获得日常订单数在下午3点到下午3点的时间间隔TSQL组由下午3点到下午3点的时间间隔

Select cast(order_datetime as date) ,count(*) 
from order_table 
where order_datetime> '01/01/2015 15:00' 
group by ????? 

我通常按

cast(order_datetime as date) ---for 12am to 12am 

,但我想下午3点到下午3点。

+0

的可能的复制[如何按小时或一组时间由10分钟](http://*.com/questions/5002661/how-to-group-time-by-hour-or-by-10-minutes) – AleFranz

+0

我不明白如何适用于这个问题。该问题是关于10分钟间隔的分组。我尝试了'group by(datepart(hour,order_datetime)/ 24)',但没有奏效。 –

+1

几天前我回答了这样的问题。 http://*.com/questions/34322662/how-do-you-select-all-records-in-a-24-hour-time-period-and-summarize-the-data-in/34322991#34322991 The只需要一个比较开始时间,然后你基于它做一个datediff(hh ...)/ 24。编辑:它也取决于你的桌子的结构,所以你可能需要得到更具体的比日期时间(嗯...像datediff(mi ... - 答案它的结构与每小时日期时间。 – ZLK

这可能是解决方案找我采取了样本数据和表变量@t来解决它COL1在表是指你的问题

SET DATEFORMAT DMY 
DECLARE @t TABLE 
(
Id int, 
Name varchar(11), 
[Col1] DateTime 
) 

INSERT INTO @t 
VALUES(1,'ABC','22/12/2012 03:45:00 PM'),(2,'SD','22/12/2012 03:01:00 PM'),(3,'SDSA','22/12/2012 02:01:00 PM'),(4,'ASDF','22/12/2012 03:30:00 PM'),(5,'ASWER','22/12/2012 02:30:00 PM') 
,(11,'NARI','21/12/2012 03:40:00 PM') 

SELECT CASE WHEN CAST(COL1 AS TIME) >'15:00:00' THEN CAST(DATEADD(DAY,1,Col1) AS date) ELSE CAST(Col1 AS DATE) END AS ORDERS,COUNT(*) AS COUNT 
FROM @t 
GROUP BY CASE WHEN CAST(COL1 AS TIME) >'15:00:00' THEN CAST(DATEADD(DAY,1,Col1) AS date) ELSE CAST(Col1 AS DATE) END