SQL-窗口函数,用于从值不为null的前一行获取值
我使用的是Exasol,在其他DBMS中,可以使用分析函数,如SQL-窗口函数,用于从值不为null的前一行获取值,sql,window,lag,exasolution,Sql,Window,Lag,Exasolution,我使用的是Exasol,在其他DBMS中,可以使用分析函数,如LAST_VALUE(),并使用OVER()函数为ORDER BY子句指定一些条件,如: select ... LAST_VALUE(customer) OVER (PARTITION BY ID ORDER BY date_x DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ) as the_last 不幸的是,我得到了以下错误: 错误:[0A000]不支持功能:窗口子
LAST_VALUE()
,并使用OVER()
函数为ORDER BY
子句指定一些条件,如:
select ...
LAST_VALUE(customer)
OVER (PARTITION BY ID ORDER BY date_x DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ) as the_last
不幸的是,我得到了以下错误:
错误:[0A000]不支持功能:窗口子句(会话:
1606983630649130920)
如果我使用:当前行而不是和前面的1
,则不会发生同样的情况
基本上,我想要的是根据不是当前行的顺序获得最后一个值。在本例中,它将是前一行的$customer
我知道我可以使用(…)上的滞后(customer,1)
,但问题是我希望前一个customer不为null,因此偏移量并不总是1
我该怎么做
非常感谢 这有用吗
select lag(customer) over (partition by id
order by (case when customer is not null then 1 else 0 end),
date
)
您可以通过两个步骤完成此操作:
select t.*,
max(customer) over (partition by id, max_date) as max_customer
from (select t.*,
max(case when customer is not null then date end) over (partition by id order by date) as max_date
from t
) t;
不,没有。明天我将用一个原始数据的例子更新我的问题。无论如何,谢谢你。