2016-08-30 2 views
0

Итак, у меня есть запрос, что я пытаюсь найти суммы и средние значения при группировке по метке времени до минуты. Тем не менее, если временная метка имеет ТОЧНУЮ минуту, но в другой час данные этих строк не отображаются. Ниже мой запрос и выход, и то, что отдельные строки являются:Функция Grouppart Datepart отсутствует данные

NumCardsPassed ProcessingTime ProcessingDate 
    10    4   2016-08-29 11:13:44.000 
     1    0   2016-08-29 11:49:43.000 
     2    1   2016-08-29 12:19:42.000 

и здесь отдельные строки с всеми группировками. Обратите внимание на то, как метка времени 12:13 и 22:13 отсутствует в приведенном выше запросе (NumCardsPassed выше должна быть равна 10 вместо этого, он добавил его в 11:13 numcards прошли в 10)

NumCardsPassed  ProcessingTime  processingdate 
    1     2   2016-08-29 11:13:44.000 
    1     0   2016-08-29 11:49:43.000 
    8     10  2016-08-29 12:13:44.000 
    1     3   2016-08-29 12:19:42.000 
    1     0   2016-08-29 22:13:47.000 

Select sum(numcardspassed) as "NumCardsPassed", 
avg(processingtime) as "ProcessingTime", min(ProcessingDate) as "ProcessingDate" 
From orderprocessormetrics 
where ProcessingDate >= '8/27/2016' and ProcessingDate < '8/30/2016' and PreprocessorType = 'SOP' and numcardsPassed > 0 and clientid = 6820 
Group by DatePart(minute, orderprocessormetrics.processingdate) 
order by processingdate 

Так в основном с того DATEPART основан на минутах, он группирует все строки с одинаковыми минутами вместе независимо от времени. Есть ли способ учесть часы и дату, а не минуты. Мне все еще нужно, чтобы она группировалась за считанные минуты, а не секунды или миллисекунды.

ответ

0

Попробуйте это (хорошее имя кстати лол):

Select sum(numcardspassed) as "NumCardsPassed", sum(numcardsfailed) as "NumCardsFailed", 
avg(processingtime) as "ProcessingTime", min(ProcessingDate) as "ProcessingDate" 
From orderprocessormetrics 
where ProcessingDate >= '8/27/2016' and ProcessingDate < '8/30/2016' and PreprocessorType = 'SOP' and numcardsPassed > 0 and clientid = 6820 
Group by convert(varchar, ProcessingDate, 108) 
order by processingdate 
0

Однако, если метка времени имеет ту же минуту, но в другой час, что данные строки не отображаться

попробовать это ..

group by 
DatePart(minute, orderprocessormetrics.processingdate), 
DatePart(hour, orderprocessormetrics.processingdate), 
DatePart(day, orderprocessormetrics.processingdate) 
0

Вам нужно усечь дата/время до минуты. Вот один из способов:

select dateadd(minute, datediff(minute, 0, processingdate), 0) as to_the_minute, 
     sum(numcardspassed) as NumCardsPassed, 
     avg(processingtime) as ProcessingTime 
From orderprocessormetrics 
where ProcessingDate >= '2016-08-27' and ProcessingDate < '2016-08-30' and 
     PreprocessorType = 'SOP' and 
     numcardsPassed > 0 and 
     clientid = 6820 
group by dateadd(minute, datediff(minute, 0, processingdate), 0) 
order by to_the_minute; 
0

Try с ниже запроса ..

Select sum(numcardspassed) as "NumCardsPassed", 
avg(processingtime) as "ProcessingTime", min(ProcessingDate) as "ProcessingDate" 
From orderprocessormetrics 
where ProcessingDate >= '8/27/2016' and ProcessingDate < '8/30/2016' and PreprocessorType = 'SOP' and numcardsPassed > 0 and clientid = 6820 
Group by CAST(orderprocessormetrics.processingdate as date) 
,DatePart(hour, orderprocessormetrics.processingdate) 
,DatePart(minute, orderprocessormetrics.processingdate) 
order by processingdate