0

我正在处理类似于此帖子的内容: TS SQL - group by minute

但是我的是从消息队列中提取的,我需要查看消息队列正在创建/发送的流量的准确计数,以及何时

Select * From MessageQueue mq

我的扩展版本如下:A)用户定义开始时间和结束时间(使用 Declare 的 @StartTime 和 @EndTime 很容易

B)给用户选择“分组”的选项。它会被 1 分钟、5 分钟、15 分钟或 30 分钟(最大)打破吗?(我曾想过用 CASE 语句来做到这一点,但我的测试问题在我身上分崩离析。)

C) 显示数据以准确显示所选间隔(分组)期间发生的事情的计数。

这就是我目前所处的位置

SQL 块:

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
4

1 回答 1

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))
于 2013-06-27T16:28:25.077 回答