Индекс выходных на основе предыдущего дня - PullRequest
1 голос
/ 20 апреля 2020

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

SELECT 
    CAST(p.date AS DATE) AS 'Date', 
    x.Month,
    x.Version,
    x.Value AS 'fcst',
     CASE WHEN isholiday = 0 
     THEN ROW_NUMBER() OVER (PARTITION BY x.Department, x.Month, p.isholiday ORDER BY p.date)
     ELSE 0
     END AS 'Index'

Вывод выглядит так:

 Date       Month   Version fcst    isholiday   Index
2020-01-01  January 3plus9  3679    1            0
2020-01-02  January 3plus9  3679    0            1
2020-01-03  January 3plus9  3679    0            2
2020-01-04  January 3plus9  3679    1            0
2020-01-05  January 3plus9  3679    1            0
2020-01-06  January 3plus9  3679    0            3
2020-01-07  January 3plus9  3679    0            4
2020-01-08  January 3plus9  3679    0            5
2020-01-09  January 3plus9  3679    0            6
2020-01-10  January 3plus9  3679    0            7
2020-01-11  January 3plus9  3679    1            0
2020-01-12  January 3plus9  3679    1            0
2020-01-13  January 3plus9  3679    0            8
2020-01-14  January 3plus9  3679    0            9
2020-01-15  January 3plus9  3679    0            10
2020-01-16  January 3plus9  3679    0            11
2020-01-17  January 3plus9  3679    0            12
2020-01-18  January 3plus9  3679    1            0
2020-01-19  January 3plus9  3679    1            0
2020-01-20  January 3plus9  3679    0            13

Столбец Index основан на столбце isHoliday , В каждой точке, которая isHoliday = 1, индекс показывает 0, как показано в инструкции case. Вместо этого, если день <> 1, мне нужно, чтобы значение индекса отображалось как значение индекса над ним.

Например, в строках, где Date = 4 января и 5 января, индекс должен отображаться как 2. Я пытался внести изменения в оператор case, но не смог найти разрешение.

1 Ответ

2 голосов
/ 20 апреля 2020

Я думаю, вы хотите, чтобы совокупный счет составил holiday = 0:

select sum(case when isholiday = 0 then 1 else 0 end) over (partition by department, month order by date) as my_index

Если holiday принимает только два значения, вы можете упростить это до:

select sum(1 - isholiday) over (partition by department, month order by date) as my_index
...