Привет! Подскажите, пожалуйста, как можно nvl заменить на стандарт sql? Не могу найти онлайн редактора чтобы даже проверить что конкретно эта функция делает..
WITH original AS (
SELECT '11111' AS userid, '2020-01-01' AS ttime, 'blog' AS source
UNION ALL
SELECT '11111', '2020-01-02', 'organic' UNION ALL
SELECT '22222', '2020-01-01', 'direct' UNION ALL
SELECT '22222', '2020-01-02', 'blog' UNION ALL
SELECT '22222', '2020-01-03', 'direct' UNION ALL
SELECT '22222', '2020-01-07', 'google' UNION ALL
SELECT '22222', '2020-01-08', 'direct' UNION ALL
SELECT '66666', '2020-01-01', 'direct' UNION ALL
SELECT '66666', '2020-01-02', 'blog' UNION ALL
SELECT '66666', '2020-01-03', 'direct'
),
t as (
select userid,
ttime, source,
nvl(lead(ttime) over (partition by userid order by ttime), '2100-01-01') as next_ttime
from original
where source != 'direct'
)
select
orig.*,
nvl(t.source, orig.source) as real_source
from original orig
left join t
on orig.userid = t.userid
and orig.ttime >= t.ttime and orig.ttime < t.next_ttime
IsNull(t.source, orig.source)