Я пытаюсь создать список дат, идентификаторов и 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 г.