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