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

Я пытаюсь создать список дат, идентификаторов и codeов состояния. Я пытаюсь заменить нулевые codeы состояния на самые предыдущие codeы состояния.

Таблица A — это список всех идентификаторов Таблица B — это список всех значений дат между двумя определенными датами Таблица C — это список всех идентификаторов с изменениями codeа состояния и датами этих изменений codeа состояния.

Я пытаюсь использовать First_Value и Last_Value, но безуспешно.

Текущий

Желаемый

Мой code следующий:

declare @dt table ([Date] date)
DECLARE @dIncr DATE = '2022-09-10'
DECLARE @dEnd DATE = '2022-09-30'

/* below creates temptable of dates between timespan defined above */
WHILE ( @dIncr <= @dEnd )
BEGIN
    INSERT INTO @dt VALUES( @dIncr )
    SELECT @dIncr = DATEADD(DAY, 1, @dIncr ) 
END
/* above creates table of dates between timespan defined above */

select
*
,LAST_VALUE(c.StatusCode) over (partition by a.Id order by c.IdDate) as Attempt1
,case 
    when c.StatusCode is null then First_Value(c.StatusCode) over (partition by a.Id order by   
        a.Id rows between unbounded preceding and unbounded following) 
    else c.StatusCode 
    end as Attempt2
,case 
    when c.StatusCode is null then LAST_VALUE(c.StatusCode) over (partition by a.Id order by 
        b.date)
    else c.StatusCode 
    end as Attempt3
    
from (
    select 
    distinct Id
    from OnlyIdsTable
) a

cross join 
    (
    select * from @dt
    ) b

left join 
    (
    select IdDate,Id,StatusCode from DatesAndIdStatusChangeTable
    ) c
    on 
    a.Id= c.Id
    and b.[Date] = c.adjdate

order by a.Id,b.Date asc

Авдей
Вопрос задан31 августа 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.