存在相同日期不同数据时,如何正确使用Lag函数处理日期?
解决Lag函数使用问题
首先修正你当前SQL的语法错误:partition by id, order by dt desc中id后面的逗号是多余的,会导致语句执行失败,必须移除。
接下来根据你的期望输出调整逻辑:
- 若你需要
next字段显示当前id分组内比当前dt晚的下一个日期,修正语法后的语句即可满足需求:
select dt, lag(dt) over (partition by id order by dt desc) as next from t1
(注:按dt desc排序时,lag()会取窗口中当前行的前一行数据,也就是时间更晚的那条记录的dt)
- 若你需要
next字段显示当前id分组内比当前dt早的上一个日期,则需将排序方向改为升序:
select dt, lag(dt) over (partition by id order by dt asc) as next from t1
另外补充:如果你的实际需求是获取当前记录的后续时间点(即当前行之后的下一条记录的dt),使用lead()函数会更直观,无需反转排序:
select dt, lead(dt) over (partition by id order by dt asc) as next from t1
内容的提问来源于stack exchange,提问作者Yash
相关产品推荐
相关产品推荐

