T-SQL проходят через даты - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть следующая таблица:

Column1     Column2   Column3
04/07/2019    1
04/08/2019    2
04/09/2019    8
04/10/2019    9
04/11/2019    15
04/12/2019    16
04/13/2019    5
04/14/2019    6 
04/15/2019    8
04/16/2019    9 
04/17/2019    10 
04/18/2019    11  
04/19/2019    5 
04/20/2019    5 
04/21/2019    8    
04/22/2019    8 
04/23/2019    9 
04/24/2019    10 
04/25/2019    11  
04/26/2019    12 
04/27/2019    10 

Мне нужно найти способ перебрать значения в первом столбце и определить недели, которые должны начинаться с субботы по воскресенье.Итак, в этом примере одна итерация должна быть с 14 по 20.Или другая итерация будет с 7 по 13, то есть с субботы по воскресенье.Затем, после определения каждой недели, мне нужно выполнить некоторые вычисления для других столбцов. Расчет будет обновлять столбец 3, если общая сумма для столбца 2 в течение 1 недели (на основе столбца 1 с субботы по воскресенье) превышает 40 или нет.Затем то же самое для следующей итерации недели (суббота - воскресенье).

Желаемые результаты:

Column1    Column2   Column3
04/07/2019    1        56
04/08/2019    2        56
04/09/2019    8        56
04/10/2019    9        56
04/11/2019    15       56
04/12/2019    16       56
04/13/2019    5        56
04/14/2019    6        54
04/15/2019    8        54
04/16/2019    9        54
04/17/2019    10       54
04/18/2019    11       54
04/19/2019    5        54
04/20/2019    5        54
04/21/2019    8        68
04/22/2019    8        68
04/23/2019    9        68
04/24/2019    10       68
04/25/2019    11       68
04/26/2019    12       68
04/27/2019    10       68

Обратите внимание: данные могут варьироваться от 3 недель до нескольких месяцев.Итак, код должен фиксировать недели для любого конкретного диапазона.

1 Ответ

1 голос
/ 28 апреля 2019

Вы можете использовать datepart(), чтобы получить неделю даты.Затем вы можете использовать неделю для разделения в sum().Оттуда вы можете UPDATE присоединить таблицу к производной таблице, которая получит сумму, указанную выше.Чтобы убедиться, что неделя начинается в воскресенье, выпустите SET DATEFIRST 7 перед UPDATE.

SET DATEFIRST 7;
UPDATE t1
       SET t1.column3 = t3.column3
       FROM elbat t1
            INNER JOIN (SELECT t2.column1,
                               sum(t2.column2) OVER (PARTITION BY datepart(week, t2.column1)) column3
                               FROM elbat t2) t3
                       ON t3.column1 = t1.column1;

db <> fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...