Определите последний эффективный статус в прошлом - PullRequest
0 голосов
/ 09 апреля 2019

Я бы хотел определить последнее состояние переменной для определенного месяца. Например

Variable        Date        Operation   State
    A           01Jan2019   1           10
    A           10Jan2019   3           20
    A           31Jan2019   4           50
    A           05Feb2019   7           60
    A           22Feb2019   8           70
    B           06Jan2019   2           10
    B           07Jan2019   3           20
    B           07Feb2019   6           60
    B           15Mar2019   9           80

Результат должен понравиться

Variable    Month       Year    Last_State_Until_End_of_Month
    A           1       2019    50
    A           2       2019    70
    A           3       2019    70
    B           1       2019    20
    B           2       2019    60
    B           3       2019    80

Обратите внимание, что для переменной A в марте последнее состояние такое же, как и для февраля. (В марте изменений не было). Я не знаю, помогает ли это, но есть идентификатор операции, который увеличивается с каждым изменением состояния независимо от выбора переменной.

1 Ответ

0 голосов
/ 09 апреля 2019

Благодаря Panagiotis Kanavos работает следующий запрос:

declare @table_test TABLE (variable_name nvarchar(255), date_var date, op_id int, state int)
insert into @table_test Values 
    ('A',           '01Jan2019',    1           ,10),
    ('A',           '10Jan2019',    3           ,20),
    ('A',           '31Jan2019',    4           ,50),
    ('A',           '05Feb2019',    7           ,60),
    ('A',           '22Feb2019',    8           ,70),
    ('B',           '06Jan2019',    2           ,10),
    ('B',           '07Jan2019',    3           ,20),
    ('B',           '07Feb2019',    6           ,60),
    ('B',           '15Mar2019',    9           ,80)

select 
    year(date_var) as year
    ,month(date_var) as month
    ,variable_name,
    ,Last_value(State) OVER (partition by year(date_var),month(date_var),variable_name order by date_var ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as last_value
from @table_test
Order by variable_name, year(date_var),month(date_var)

Этот запрос возвращает:

year    month   variable_name   last_value
2019    1       A               50
2019    1       A               50
2019    1       A               50
2019    2       A               70
2019    2       A               70
2019    1       B               20
2019    1       B               20
2019    2       B               60
2019    3       B               80
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...