首页 > 解决方案 > SQL - 使用日期表计算员工最后工作的天数?

问题描述

我有一张表格,显示员工上次工作的时间。它看起来像下面

EMPID           Sickness          Date
23333             N            01-FEB-2018
23333             N            02-FEB-2018
23333             N            10-FEB-2018
23333             N            11-FEB-2018

我想做的是加入日期表并添加一个附加列,该列显示员工失业> = 5天的日期。基于上述内容的示例输出如下所示

EMPID           Sickness          NewDate              AbsFlagAdded
23333             N            01-FEB-2018              0
23333             N            02-FEB-2018              0
23333             N            03-FEB-2018              0
23333             N            04-FEB-2018              0
23333             N            05-FEB-2018              0
23333             N            06-FEB-2018              0
23333             N            07-FEB-2018              1
23333             N            08-FEB-2018              0
23333             N            09-FEB-2018              0
23333             N            10-FEB-2018              0
23333             N            11-FEB-2018              0

AbsFlagAdded 在 2 月 7 日被标记为 1,因为这是 EMPID 23333 根据原始表连续第 5 天下班。

有人可以帮忙吗?我以前没有真正使用过日期表。感谢任何帮助

杰斯

标签: sqlsql-server-2012

解决方案


这是使用datediffwith的一个case

select t.empid, d.dt, 
       case when datediff(day, max(t.dt), d.dt) = 5 then 1 else 0 end as absflaggadded
from dates d
    left join yourtable t on d.dt >= t.dt
group by t.empid, d.dt
order by d.dt

dates用作日期表。注意检查——如果你使用equals outer join,这可以确保你得到匹配的结果而不是值。null


推荐阅读