You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中基于条件计算含往期周期的病假总天数

嘿,我来帮你搞定这个病假时长合并计算的问题,先把你的原始数据整理成清晰的表格,再一步步拆解计算逻辑~

员工病假原始数据表
员工编号(Key)开始日期(Start date)结束日期(End date)本次病假天数(Duration in days)上次病假时长(Duration of last sickleave)间隔是否不足28天(Less than 28 days)
000101-01-201514-01-2015130Yes
000103-03-201519-03-20151613No
00012...————

(注:第三条记录内容不完整,后续可以按同样逻辑补充处理)

病假时长合并计算逻辑

我把计算步骤拆成简单几步,你跟着走就行:

  • 第一步:按员工分组:先把同一个员工编号(Key)的所有病假记录归在一起,比如所有0001的记录单独处理,避免和其他员工的数据混在一起。
  • 第二步:算间隔天数:对每一条后续记录,用它的「开始日期」减去上一条记录的「结束日期」,得到两次病假的间隔天数。比如0001的第一次病假结束于14-01-2015,第二次开始于03-03-2015,算下来间隔是48天,确实超过28天,所以不用合并。
  • 第三步:判断是否合并周期:如果间隔天数不足28天,就把本次病假天数和之前的累计时长加起来,当成一个连续的病假周期;如果间隔≥28天,就重新开始累计,本次天数作为新周期的起点。
  • 第四步:更新累计时长:每处理完一条记录,就更新这个员工的「累计病假时长」,方便下一条记录判断时使用。

举个实际计算例子(基于现有完整记录)

对于员工0001的前两条记录:

  1. 第一条病假:没有之前的记录,累计时长直接就是13天。
  2. 第二条病假:间隔48天≥28天,所以累计时长重置为16天,两条记录的总病假时长就是13+16=29天。

要是之后有第三条记录,比如开始日期是20-03-2015(和上次结束日19-03-2015间隔1天,不足28天),病假天数是5天,那这条的累计时长就是16+5=21天,员工0001的总病假时长就变成13+21=34天啦。

内容的提问来源于stack exchange,提问作者Matte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:09:54