我有一张表,显示员工上次工作的时间。看起来像下面的
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天下班。
有人可以帮忙吗?我以前没有真正使用过Date表。感谢任何帮助
杰西
答案 0 :(得分:1)
以下是将datediff
与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
作为日期表。注意outer join
检查-如果您使用equals,这可以确保获得匹配的结果,而不是null
值。