MySQL如何从下一行取值计算员工工作结束日期?
实现MySQL中根据下一行数据计算结束日期的方法
要实现根据下一行的ini_day值减1得到当前行的end_day,可以分两种情况处理,取决于你的MySQL版本:
方法一:使用窗口函数(MySQL 8.0及以上版本)
MySQL 8.0及以上支持窗口函数LEAD(),这是最简洁的实现方式:
SELECT ID, Name, ini_day, LEAD(ini_day) OVER (ORDER BY ID) - 1 AS end_day FROM your_table_name;
说明:
LEAD(ini_day) OVER (ORDER BY ID):按照ID升序排序,获取当前行的下一行对应的ini_day值- 对获取到的下一行
ini_day减1,就得到当前行的end_day;最后一行没有下一行,LEAD()会返回NULL,减1后结果仍为NULL,符合需求。
方法二:自连接实现(MySQL 5.x版本)
如果你的MySQL版本不支持窗口函数,可以通过自连接的方式实现:
SELECT t1.ID, t1.Name, t1.ini_day, (t2.ini_day - 1) AS end_day FROM your_table_name t1 LEFT JOIN your_table_name t2 ON t2.ID = t1.ID + 1 ORDER BY t1.ID;
说明:
- 通过左连接,将当前行的
ID+1作为关联条件,匹配下一行的数据 - 左连接保证最后一行(最大ID)无法匹配到下一行,因此
end_day会是NULL,符合预期。
执行上述任意一种SQL,都能得到你预期的结果:
ID | Name | ini_day | end_day ------------------------------ 1 | Juan | 1 | 4 2 | Nora | 5 | 8 3 | Pepe | 9 | 11 4 | Lara | 12 | 17 5 | Alex | 18 | 19 6 | Lily | 20 | NULL
内容的提问来源于stack exchange,提问作者Matt Ross
相关产品推荐
相关产品推荐

