2016-12-08 2 views
0

У меня в настоящее время есть SQL-скрипт, который возвращает результаты элементов данных, которые обрабатываются в базе данных из импортированных файлов, однако мы смотрим на подсчет количества элементов, которые войдите в базу данных, разбитую на 5-минутные интервалы, на определенный день.SQL Server 2008 - Группировка результатов с интервалом в 5 минут

Мой существующий скрипт выглядит следующим образом:

declare @date datetime 
set @date = '2016-12-07 00:00:00.000 

Select filename, IE.dateprocessingstarted 
    from tdii_inboundprocessed IE 
    inner join consignmentpf cpf 
     on ie.inboundfileprocessedid = cpf.inboundprocessedid 
where 1=1 and (ie.dateprocessingstarted between `@date` and `dateadd(dd,1,@date)` 

Это возвращает следующее:

FilenameDate ProcessingStarted

GOOD813546 2016-12-07 00:02:00
GOOD813546 2016-12 -07 00:02:00
GOOD813546 2016-12-07 00:02:00
GOOD813546 2016-12-07 00:02:00
GOOD813546 2016-12-07 00:02:00
GOOD813546 2016-12-07 00:02:00
GOOD813554 2016-12-07 00:08:00
GOOD813554 2016-12-07 00:08 : 00
GOOD813554 2016-12-07 00:08:00
GOOD813554 2016-12-07 00:08:00

Что я хотел бы видеть это:
DateTime numberoffiles
2016-12 -07 00:05:00 6
2016-12-07 00:10:00 4

и т.д.

tdii_inboundprocessed таблица содержит сведения о файлах, входящих в систему, включая время мы заинтересованы в dateprocessingstarted) consignmentpf таблица содержит детали элементов в пределах конкретного файла, и это число, которое мы заинтересованы в получении счета.

Спасибо за любую помощь

+0

пожалуйста показать некоторые выборочные данные и ожидаемый результат и объяснить вместе с ним – TheGameiswar

ответ

0
SELECT t.date , 
     COUNT(*) 
FROM (SELECT DATEADD(MINUTE, 
          ((DATEDIFF(MINUTE, @date, 
             IE.dateprocessingstarted)/5) * 5) 
          + 5, @date) [date] 
      FROM  @tdii_inboundprocessed IE 
        INNER JOIN consignmentpf cpf ON IE.inboundfileprocessedid = cpf.inboundprocessedid 
      WHERE  1 = 1 
        AND (IE.dateprocessingstarted BETWEEN @date 
                AND  DATEADD(dd, 1, 
                   @date)) 
     ) AS t 
GROUP BY t.date; 
Смежные вопросы