SQL Group by Minute- Expanded

时间:2013-06-27 16:14:55

标签: sql sql-server sql-server-2008

我正在研究类似这篇文章的内容: 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

1 个答案:

答案 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))