DateDiff по количеству дней недели не соответствует фактическому количеству из бумажного календаря - PullRequest
0 голосов
/ 14 марта 2020

У меня есть запрос, который группирует по дням недели:

SELECT DATENAME(DW,rct.rpt_date) [Day of The Week]
      ,DATEDIFF(day,CAST(@date_from as DATE),CAST(@date_to AS DATE) [Number]
      ,COUNT(DISTINCT rct.rpt_date) as [Occurrence / Active]
FROM receipt_summary rct
WHERE rct.rpt_date between CAST(@date_from as DATE) and CAST(@date_to AS DATE)
AND rct.bus_id = 10
GROUP BY DATENAME(DW,rct.rpt_date)
ORDER BY CASE DATENAME(DW,rct.rpt_date)
WHEN 'SUNDAY' THEN 1
WHEN 'MONDAY' THEN 2
WHEN 'TUESDAY' THEN 3
WHEN 'WEDNESDAY' THEN 4
WHEN 'THURSDAY' THEN 5
WHEN 'FRIDAY' THEN 6
WHEN 'SATURDAY' THEN 7 END

Когда я использовал DATEDIFF (wk,@dateFrom,@dateTo) в качестве одного столбца, количество в столбце Number одинаково для всех семь дней. Это не соответствует количеству, которое я намеревался получить, сравнивая счет с использованием бумажного календаря.

Например, в период с 1 декабря 2019 года по 12 марта 2020 года я ожидаю увидеть 15 раз с воскресенья по четверг, в то время как пятницы и субботы должны показывать 14 раз. Столбец Неактивно - это, естественно, вычитание числа - вхождения. В соответствии с вышеуказанной проблемой, воскресенье - четверг показывает 14.

Этот снимок экрана - это то, чего я надеюсь достичь:

enter image description here

Может кто-нибудь помочь в этом? Где именно я пропустил?

Примечание. Для группировки по дню месяца я знаю, что она похожа по структуре, за исключением замены DATENAME (DW, date) на DATENAME(D,rct.rpt_date) + CASE WHEN DAY IN (1,21,31) Then ... et c, но насколько она будет отличаться обработка в части DATEDIFF?

ОБНОВЛЕНИЕ Обновленный снимок экрана показывает текущие и ожидаемые результаты:

Current and expected result

Это календарь с декабря 2019 года по март 2020 года. Обозначается в полях количество воскресений, понедельников и т. Д. С (дата) по 12 марта 2020 года (дата до).

Calendar from Dec 2019 to March 2020

...