如果当前结束日期与下一行的开始日期相比,每个员工编号不连续,则需要创建一行。数据框看起来像这样:
员工编号 | 起始日期 | 结束日期 | 001 | 1999-11-29 | 2000-03-12 |
---|---|---|
001 | 2000-03-13 | 2001-06-30 |
001 | 2001-07-01 | 2002-01-01 |
002 | 2000-09-18 | 2000-10-05 |
002 | 2000-10-06 | 2001-06-30 |
002 | 2004-05-01 | 2005-12-31 |
002 | 2008-01-01 | 2008-11-25 |
方案A:(填空)
- 创建一个包含所有可能日期(在期望范围内)的表。(这很容易在MariaDB中通过使用
seq_...
来实现,但在MySQL中更麻烦。) SELECT ... FROM that-table-of-dates LEFT JOIN your-table ON ...
表示用给定孔之前(或之后)的值填充空隙。我不明白目标。
方案B:(简单地发现差距)
做一个"自连接"桌子和它自己的关系。为此,您必须具有连续的id。既然你没有,我不知道该怎么办。
然后检查一行的(end_date + INTERVAL 1 DAY)
是否与"下一行"的start_date
匹配
Plan C:(需要MySQL 8.0或MariaDB 10.2)
使用LAG()
(或' LEAD())窗口函数将一行中的值与前一行(或下一行)进行比较。
这可能是设置"连续标志"最简单的方法了。
请务必检查上述EmployeeId和INTERVAL 1 DAY
中的不连续性。