Решение может быть достигнуто путем объединения CASE
с подзапросом, который извлечет первое действительное значение, упорядоченное по данным.
См. Приведенный ниже пример с использованием T- SQL.
create table dbo.WeightLog
(
ENCOUNTER_ID int null,
KG int null,
DATE_RECORDED date null,
CALENDAR_DT date not null
)
GO
insert into dbo.WeightLog values
(100 , 10, '2019-01-01', '2019-01-01'),
(NULL, NULL, NULL, '2019-01-02'),
(100 , 12, '2019-01-03', '2019-01-03'),
(NULL, NULL, NULL, '2019-01-04'),
(NULL, NULL, NULL, '2019-01-05'),
(NULL, NULL, NULL, '2019-01-06'),
(100 , 13, '2019-01-07', '2019-01-07'),
(NULL, NULL, NULL, '2019-01-08')
GO
select
wl.ENCOUNTER_ID,
case when wl.KG is null
then (select top 1 x.KG from dbo.WeightLog x where x.CALENDAR_DT < wl.CALENDAR_DT
and x.KG is not null order by x.CALENDAR_DT desc)
else wl.KG end as [Kg],
wl.DATE_RECORDED,
wl.CALENDAR_DT
from dbo.WeightLog wl
Результат:
ENCOUNTER_ID Kg DATE_RECORDED CALENDAR_DT
------------ ----------- ------------- -----------
100 10 2019-01-01 2019-01-01
NULL 10 NULL 2019-01-02
100 12 2019-01-03 2019-01-03
NULL 12 NULL 2019-01-04
NULL 12 NULL 2019-01-05
NULL 12 NULL 2019-01-06
100 13 2019-01-07 2019-01-07
NULL 13 NULL 2019-01-08
Примечание: в нем не рассматривается конкретный случай, когда первая запись равна нулю.