我有一个类似的问题想在这里发帖。 需要连续3天或以上缺席的员工。假设所有的日子都是工作日,周六/周日/任何其他日子都没有假期。
在下表中,我需要在结果集中使用20342123和20311111。 员工20311333已经取得4片叶子,但它们不是连续的。
提前感谢您的帮助。
Emp Id | AsofDate | Comment
----------------------------------
20342123 | 1-JAN-2017| Absent
20342123 | 2-JAN-2017| Absent
20342123 | 3-JAN-2017| Absent
20311111 | 1-JAN-2017| Absent
20311111 | 2-JAN-2017| Absent
20311111 | 3-JAN-2017| Absent
20311333 | 5-JAN-2017| Absent
20311333 | 6-JAN-2017| Absent
20311333 | 8-JAN-2017| Absent
20311333 | 9-JAN-2017| Absent
20322222 | 1-JAN-2017| Absent
20322222 | 2-JAN-2017| Absent
答案 0 :(得分:1)
虽然你可以使用" gap-and-islands"解决方案,我认为lag()
/ lead()
更容易解决这个问题:
select distinct emp_id
from (select t.*,
lead(date) over (partition by empid order by date) as date_1,
lead(date, 2) over (partition by empid order by date) as date_2
from t
where comment = 'Absent' -- not sure if this is important
) t
where date_1 = date + 1 and date_2 = date + 2;