我正在研究类似这篇文章的内容: TS SQL - group by minute
然而我的是从消息队列中拉出来的,我需要查看Message Queue正在创建/发送的流量的准确计数,以及在什么时间
Select * From MessageQueue mq
我的扩展版本如下: A)用户定义开始时间和结束时间(使用Declare的@StartTime和@EndTime
足够简单B)为用户提供选择“分组”的选项。是1分钟,5分钟,15分钟还是30分钟(最大)。 (我曾经想过用CASE声明做这件事,但我的测试问题在我身上崩溃了。)
C)显示数据以准确显示在选择的间隔(分组)期间发生的事件的计数。
这是我到目前为止的地方
SQL Blob:
DECLARE @StartTime datetime
DECLARE @EndTime datetime
SELECT DATEPART(n, mq.cre_date)/5 as Time --Trying to just sort by 5 minute intervals
,CONVERT(VARCHAR(10),mq.Cre_Date,101)
,COUNT(*) as results
FROM dbo.MessageQueue mq
WHERE mq.cre_date BETWEEN @StartDate AND @EndDate
GROUP BY DATEPART(n, mq.cre_date)/5 --Trying to just sort by 5 minute intervals
, eq.Cre_Date
这是我想要实现的输出:
[Time] [Date] [Message Count]
1300 06/26/2012 5
1305 06/26/2012 1
1310 06/26/2012 100
答案 0 :(得分:2)
这是一种做你想做的事情的方法:
DECLARE @StartTime DATETIME, @EndTime DATETIME
DECLARE @Interval INT
SET @StartTime = '20130625'
SET @EndTime = '20130627'
SET @Interval = 5
SELECT CONVERT(VARCHAR(10),mq.Cre_Date,101) [Date],
CONVERT(TIME,DATEADD(MINUTE,DATEDIFF(MINUTE,0,mq.Cre_Date)/@Interval*@Interval,0)) [Time],
COUNT(*) Results
FROM dbo.MessageQueue mq
WHERE mq.cre_date >= @StartDate
AND mq.cre_date <= @EndDate
GROUP BY CONVERT(VARCHAR(10),mq.Cre_Date,101),
CONVERT(TIME,DATEADD(MINUTE,DATEDIFF(MINUTE,0,mq.Cre_Date)/@Interval*@Interval,0))