Группировка по интервалу времени - PullRequest
0 голосов
/ 03 ноября 2011

Мне нужно сгруппировать свой стол в 15-минутные интервалы.Я могу сделать это с помощью:

select dateadd(minute, datediff(minute, 0, ts) / 15 * 15, 0), sum (goodpieces) 
from StationCount 
Group by dateadd(minute, datediff(minute, 0, ts) / 15 * 15, 0)

Но для отображения возвращаемых данных в диаграмме мне нужно также вставить интервалы, которые не имеют никаких данных и в настоящее время не отображаются в моем операторе выбора.Как мне вставить их?

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

Нечто подобное может вам помочь.

declare @startDate datetime
        ,@endDate datetime

set @startDate = '2011-10-25'
set @endDate = '2011-10-26'

;with fifteenMinutes
as
(
    select  dateadd(minute, datediff(minute, 0, @startDate) / 15 * 15, 0) as q
    UNION ALL
    select  dateadd(minute, 15, q)
    from fifteenMinutes
    where q < @endDate
)

select * from fifteenMinutes
1 голос
/ 03 ноября 2011

Создайте таблицу с каждой возможной отметкой времени с шагом 15 минут и выполните левое соединение с ней по вашему запросу выше.

SELECT * FROM timestamps LEFT JOIN (SELECT dateadd......) ON timestamps.timestamp = StationCount.ts

Если вы знаете, что ваш график всегда охватывает 24-часовой период, вам нужно всего лишь создать таблицу с номерами 0-95, затем для каждой записи добавьте ее во время начала вашего графика.

SELECT *
  FROM (SELECT dateadd(minute, <starttime>, number*15) timestamp FROM numbers) timestamps LEFT JOIN
       (SELECT dateadd......) ON timestamps.timestamp = StationCount.ts
...