LAG和第一个NULL

时间:2019-04-15 13:55:21

标签: sql oracle lag lead

我有下表:

id    date       cust
1     3/13/2019  
1     3/14/2019  Johnson
1     3/19/2019 

我想创建一个按ID捕获最后一个客户条目和分区的列。

我有以下内容。

select *
,case
 when a.cust is not null then a.cust
 else lag(a.cust) over partition by a.id order by a.date)
 end lst_cust
from A

结果:

id  date        cust
 1   3/13/2019
 1   3/14/2019  Johnson
 1   3/19/2019  Johnson

如何捕获第一行的“约翰逊”?

我也在考虑使用lead,但不确定如何将它们嵌入到case表达式中,以及这是否是我要寻找的。或LAST_VALUE首先为空,但看不到它能正常工作。

2 个答案:

答案 0 :(得分:2)

<Pivot x:Name="XmlConfigPivot"> <PivotItem Header="Layout"> <Frame> <xml_config:Layout_Tab/> </Frame> </PivotItem> <PivotItem Header="stub_tab"> <Frame> <xml_config:Stub_Tab/> </Frame> </PivotItem> </Pivot> 是个好主意,只需添加window子句:

last_value

demo

答案 1 :(得分:0)

我认为您同时需要lead()lag()

select a.*,
       coalesce(a.cust, 
                lag(a.cust) over partition by a.id order by a.date),
                lead(a.cust) over partition by a.id order by a.date)
               ) as lst_cust
from A;

如果您可以连续包含多个ignore nulls,则可能还需要null