Как вести подсчет по неделям в зависимости от даты

#sql #sql-server

Вопрос:

Я ищу что-то в этом роде.

 StartOfWeek EndOfWeek   WeekNumber  order_opened    order_send  order_closed
2019-01-01  2019-01-06  2019W01         
2019-01-07  2019-01-13  2019W02         
2019-01-14  2019-01-20  2019W03         
2019-01-21  2019-01-27  2019W04         
2019-01-28  2019-02-03  2019W05         
 

У меня есть таблица с 4 столбцами , order_id , opening_date, sending_date и closing_date, я также могу создать таблицу дат.
Я думаю, что мне нужно использовать «с»,
но я не могу найти решение, которое работает,
Любая помощь была бы очень кстати .

С уважением, Антуан

Комментарии:

1. Пожалуйста, предоставьте примерные данные и соответствующие результаты.

Ответ №1:

Если я правильно понимаю, вы хотите отключить и объединить. Я бы рекомендовал:

 select c.weeknumber, sum(is_open), sum(is_send), sum(is_close)
from t cross apply
     (values (opening_date, 1, 0, 0),
             (sending_date, 0, 1, 0),
             (closing_date, 0, 0, 1)
     ) v(date, is_open, is_send, is_close) join
     calendar c
     on v.date = c.date
group by c.weeknumber;
 

Я сомневаюсь, что первые две колонки важны для этого вопроса. Не видя таблицы календаря или определения «недели», трудно определить лучший способ их определения.