oracle SQL中的连续记录

时间:2017-02-07 16:58:10

标签: sql oracle

我有一个类似的问题想在这里发帖。 需要连续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

1 个答案:

答案 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;