脚本内容
原始数据如下:
drop table test_gen purge;
create table test_gen as
(
select 1 as seqno,1 as amount from dual
union all
select 2 as seqno,null as amount from dual
union all
select 3 as seqno,null as amount from dual
union all
select 4 as seqno,null as amount from dual
union all
select 5 as seqno,2 as amount from dual
union all
select 6 as seqno,null as amount from dual
union all
select 7 as seqno,null as amount from dual
union all
select 8 as seqno,3 as amount from dual
union all
select 9 as seqno,null as amount from dual
union all
select 10 as seqno,null as amount from dual
union all
select 11 as seqno,5 as amount from dual
);
复制

要求:希望通过SQL查出一个虚拟列AMOUNT_ALL,该列以SEQNO的顺序根据AMOUNT字段的值填充,如果AMOUNT有值则虚拟列等于该条记录中AMOUNT的值,如果AMOUNT的值为NULL,则该虚拟列为上一条AMOUNT不为NULL的值,输出示例如下:

各位将SQL贴到评论区,并说明数据库(数据库不限,欢迎大家使用国产数据库测试),最后通过SQL质量、实现逻辑、优雅度以及评论的先后顺序评出本次大赛的一等奖及合格参赛奖若干。
评论
7月前

评论
SELECT T.SEQNO,T.AMOUNT,IFNULL(IFNULL(IFNULL(T.AMOUNT,LAG(T.AMOUNT, 1) over (order by T.SEQNO)),LAG(T.AMOUNT, 2) over (order by T.SEQNO)),LAG(T.AMOUNT, 3) over (order by T.SEQNO)) AMOUNT_ALL FROM test_gen T order BY T.SEQNO;
7月前

评论
7月前

评论
7月前

评论