如何在一张工作表中有 empno(员工号),calendar_dat(日期),calendar_dat(日期),work_flag(工作标记,1:当日工作 0:休息日?

遇到一个需求是,在一张工作表中有 empno(员工号),calendar_dat(日期),work_flag(工作标记,1:当日工作  0:休息日)

希望实现查询结果可以显示每个日期的下次工作日的日期。

img

希望能实现如下结果

img

比如:1月1日(工作日)、1月2日(休息日) 对应下次的工作日是1月3日

由于MySQL版本是5.7 的所以不支持分析函数

自己和自己关联一下应该就可以了,
关联自己的时候,需要限制员工号相同,工作标记为1,日期大于当前表的日期,满足这些条件之后,再取最小的日期,就可以作为下次的工作日日期了

select a.empno,a.calendar_dat,a.work_flag,min(b.calendar_dat)
from a
left join a b
  on a.empno=b.empno and b.work_flag=1 and b.calendar_dat>a.calendar_dat
group by a.empno,a.calendar_dat,a.work_flag