SQL中如何在同表获取次日列值?已尝试LEAD函数未获正确结果
如何用SQL实现获取次日value值的需求
原始数据
| date | value |
|---|---|
| 2023-01-01 | 100 |
| 2023-02-02 | 400 |
| 2023-02-03 | 749 |
| 2023-02-04 | 432 |
预期结果
| date | value | next day value |
|---|---|---|
| 2023-01-01 | 100 | 400 |
| 2023-02-02 | 400 | 749 |
| 2023-02-03 | 749 | 432 |
| 2023-02-04 | 432 | 432 |
问题描述
需要新增一列next day value来获取次日的value值,尝试使用LEAD(value) ORDER BY (date)函数但未得到正确结果,请问如何用SQL实现?
解决方案
你用LEAD没得到正确结果,主要是没指定合适的默认值,另外ORDER BY的写法可以更规范。
正确的SQL语句如下:
SELECT date, value, LEAD(value, 1, value) OVER (ORDER BY date) AS `next day value` FROM your_table_name;
关键说明:
LEAD(value, 1, value):第一个参数是要取的目标列,第二个参数1表示取下一行数据(对应次日,因为按日期排序),第三个参数value是当没有下一行时(比如最后一条记录),用当前行的value填充,刚好匹配你的预期。OVER (ORDER BY date):必须按date升序排序,保证行的顺序是日期先后,这样LEAD才能准确取到次日的值。
之前写法的问题:
- 省略默认值的话,
LEAD默认会返回NULL作为最后一行的next day value,不符合你的需求。 ORDER BY (date)里的括号是多余的,虽然多数数据库兼容,但规范写法是ORDER BY date。
内容的提问来源于stack exchange,提问作者Antara
相关产品推荐
相关产品推荐

