求SQL查询语句:按日期顺序逐行比较取最大record值
解决方案
要实现按date字段顺序,将当前行与下一行的record值取较大值的需求,可根据数据库版本选择以下SQL实现:
支持窗口函数的数据库(MySQL 8.0+、PostgreSQL、SQL Server等)
使用LEAD()窗口函数获取下一行的record值,再通过GREATEST()函数取两者最大值:
SELECT GREATEST(record, LEAD(record) OVER (ORDER BY date)) AS max_record FROM your_table_name;
- 细节说明:
LEAD(record) OVER (ORDER BY date):按date排序后,获取当前行的下一行record值,最后一行无下一行时返回NULL,此时GREATEST()会直接返回当前行的record。- 若要统一处理最后一行的
NULL情况,可改用COALESCE兜底:SELECT GREATEST(record, COALESCE(LEAD(record) OVER (ORDER BY date), record)) AS max_record FROM your_table_name;
低版本MySQL(无窗口函数,如MySQL 5.x)
通过自连接+子查询实现:
SELECT GREATEST(t1.record, COALESCE(t2.record, t1.record)) AS max_record FROM your_table_name t1 LEFT JOIN your_table_name t2 ON t2.id = ( SELECT id FROM your_table_name WHERE date > t1.date ORDER BY date ASC LIMIT 1 ) ORDER BY t1.date;
- 细节说明:子查询会找到当前行
date之后的下一条记录,再通过自连接完成取值比较。
注意:请将上述语句中的
your_table_name替换为你的实际数据表名称。
内容的提问来源于stack exchange,提问作者user1125803
相关产品推荐
相关产品推荐

