思路:
i=0;--记录连续上班天数
lastdate;--记录上次上班日期
thisdate;--记录本次上班日期
定义一个游标(时间排序),循环每个员工的考勤情况,i:=i+1;如果该员工两个工作日之差为1,表示连续上班了,没问题,i 继续往下加;如果两个工作日之差大于1,表示未连续上班,并且 i 1 and i1 and i select * from test;
ID
WORK_DATE
---------- -------------------- -----------
001
2005-8-1
002
2005-8-1
003
2005-8-1
002
2005-8-2
003
2005-8-2
001
2005-8-3
002
2005-8-3
001
2005-8-4
002
2005-8-4
001
2005-8-5
002
2005-8-5
001
2005-8-6
002
2005-8-6
001
2005-8-7
002
2005-8-7
001
2005-8-8
001
2005-8-9
17 rows selected
select id from
(
select id,work_date - row_number() over(partition by id order by work_date) part
from test t
)
group by id,part having count(*) >= 7
SQL>
7/
ID
----------
001
002