Requires Free Membership to View
Your table probably looks something like this:
empabsences empno dateabsent 1 2003-01-01 1 2003-02-28 1 2003-03-01 1 2003-03-02 1 2003-03-03 3 2003-03-01 3 2003-03-02 3 2003-03-03 4 2003-03-04 5 2003-01-05 5 2003-01-06 5 2003-01-08 5 2003-01-09 5 2003-01-10 8 2003-01-08
Employees absent for any three consecutive days can be found as follows (the DATEADD function is Microsoft Access syntax, so you'll want to adjust this for whatever database you're using):
select empno, dateabsent
from empabsences X
where exists
( select 1 from empabsences
where empno = X.empno
and dateabsent
= dateadd("d",-1,X.dateabsent) )
and exists
( select 1 from empabsences
where empno = X.empno
and dateabsent
= dateadd("d",-2,X.dateabsent) )
The results of this query for the given sample data are:
empno dateabsent 1 2003-03-02 1 2003-03-03 3 2003-03-03 5 2003-01-10
This identifies all occurrences of the third consecutive day absent. Notice that employee 1 was absent 4 consecutive days, and that both the 3rd and 4th are reported.
The problem was to report employees who weren't absent any three consecutive days, so we need a query on the main employee table. Remove dateabsent from the above query, add DISTINCT so that it returns unique empno values, and place it into a NOT IN subselect within an outer query on the employee table:
select empno
from employees
where empno not in
( select distinct empno
from empabsences X
where exists
( select 1 from empabsences
where empno = X.empno
and dateabsent
= dateadd("d",-1,X.dateabsent) )
and exists
( select 1 from empabsences
where empno = X.empno
and dateabsent
= dateadd("d",-2,X.dateabsent) )
)
For More Information
- Dozens more answers to tough SQL questions from Rudy Limeback.
- The Best SQL Web Links: tips, tutorials, scripts, and more.
- Have an SQL tip to offer your fellow DBAs and developers? The best tips submitted will receive a cool prize. Submit your tip today!
- Ask your technical SQL questions -- or help out your peers by answering them -- in our live discussion forums.
- Ask the Experts yourself: Our SQL, database design, Oracle, SQL Server, DB2, metadata, object-oriented and data warehousing gurus are waiting to answer your toughest questions.
This was first published in April 2003

Join the conversationComment
Share
Comments
Results
Contribute to the conversation