select 
user_id,
date,
lead(date,1,null) over(partition by user_id order by date) as nextdate
from questions_pass_record;

当所求为窗口中某列的原值时,自然而然想到的是lead、lag等开窗函数;

over里还是老样子,partion by 用户分区,order by 日期(等价于不同的天)顺序排列,这样一来

此时的current_row代表的是原数据中的一行,我们要的是下一个日期即使date,所以在lead函数的三个参数中

参数1:要截取的是哪一个字段(列),我们要的是date (必填)

参数2:要截取的是在current_row后第几行,我们要的是紧接着的一个,即后1个,输入1

参数3:假如current_row后面参数2行的位置已经没有数据了,返回什么值,我们输入null(默认即为null)

所以对应了 lead(date, 1, null ) 也可以写 lead(date, 1 )