如果日期不连续,则从上一行和下一行创建行



如果当前结束日期与下一行的开始日期相比,每个员工编号不连续,则需要创建一行。数据框看起来像这样:

tbody> <<tr>
员工编号 起始日期 结束日期
0011999-11-292000-03-12
0012000-03-132001-06-30
0012001-07-012002-01-01
0022000-09-182000-10-05
0022000-10-062001-06-30
0022004-05-012005-12-31
0022008-01-012008-11-25

方案A:(填空)

  1. 创建一个包含所有可能日期(在期望范围内)的表。(这很容易在MariaDB中通过使用seq_...来实现,但在MySQL中更麻烦。)
  2. 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中的不连续性。

最新更新