2013-06-27 3 views
0

Я работаю над чем-то похож на этот пост здесь: TS SQL - group by minuteSQL Group по мельчайшая Expanded

Однако шахта вытягивать из очереди сообщений, и мне нужно, чтобы увидеть точный подсчет количества трафика, который сообщений Очередь создания/отправки, и в какое время

Select * From MessageQueue mq 

Моя расширенная версия этого, хотя выглядит следующим образом: A) Пользователь определяет время начала и время окончания (достаточно просто с помощью @StartTime DECLARE в и @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 

ответ

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)) 
+0

@KyleHale О, 'GETDATE()' t здесь была плохая копия-паста, исправлена ​​она сейчас. – Lamak

+0

Вы, ребята, не перестаете меня удивлять. Честно говоря, я не могу поблагодарить вас за это. Мне нужно еще несколько членов Совета, прежде чем я смогу «Проголосовать», но я отметил это как ответ. – Barnie