SQL按分钟分组-扩展

SQL按分钟分组-扩展,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在做一些类似于本文的工作: 但是,我的是从消息队列中提取的,我需要查看消息队列正在创建/发送的通信量的准确计数,以及在什么时候 Select * From MessageQueue mq 我的扩展版本如下: A) 用户定义开始时间和结束时间(使用Declare的@StartTime和@EndTime非常简单) B) 给用户选择“分组”的选项。它将在1分钟、5分钟、15分钟或30分钟(最长)内结束。(我本想用一个案例陈述来做这件事,但我的测试问题在我身上分崩离析。) C) 显示数据以准确显

我正在做一些类似于本文的工作:

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

Select * From MessageQueue mq
我的扩展版本如下: A) 用户定义开始时间和结束时间(使用Declare的@StartTime和@EndTime非常简单)

B) 给用户选择“分组”的选项。它将在1分钟、5分钟、15分钟或30分钟(最长)内结束。(我本想用一个案例陈述来做这件事,但我的测试问题在我身上分崩离析。)

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

以下是一种实现您所需的方法:

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))
声明@StartTime DATETIME,@EndTime DATETIME
声明@Interval INT
设置@StartTime='20130625'
设置@EndTime='20130627'
设置@Interval=5
选择CONVERT(VARCHAR(10),mq.Cre_Date,101)[Date],
转换(时间,日期添加(分钟,日期差异(分钟,0,mq.Cre_日期)/@Interval*@Interval,0))[TIME],
计数(*)结果
来自dbo.MessageQueue mq
其中mq.cre_date>=@StartDate

还有mq.cre_date@KyleHale噢,
GETDATE()
有一个坏的复制粘贴,现在就修复了。你们这些家伙总是让我惊讶不已。老实说,我真的非常感谢你。我还需要几位代表才能“投票”,但我已经将此标记为答案。