我有一个表有类似于下面的数据
Emp Date Code
--- -------- ----
E1 11/1/2012 W
E1 11/1/2012 V
E2 11/1/2012 W
E1 11/2/2012 W
E1 11/3/2012 W
E1 11/4/2012 W
E1 11/5/2012 W
我想获取在日期范围(比如过去 3 个月)之间连续为代码 W 工作 5 天的员工列表,输出中的日期范围。每个员工在一天内可以有多个不同代码的记录。
预期输出是
Emp Date-Range
--- ----------
E1 11/1 -11/5
以下是我尝试过的,但我根本没有接近我寻求的输出
SELECT distinct user, MIN(date) startdate, MAX(date) enddate
FROM (SELECT user, date, (TRUNC(date) - ROWNUM) tmpcol
FROM (SELECT user, date
FROM tablename
where date between to_date('10/01/2012','mm/dd/yyyy') and to_date('10/03/2012','mm/dd/yyyy')
ORDER BY user, date) ot) t
GROUP BY user, tmpcol
ORDER BY user, startdate;
如果 Emp E1 连续工作了 10 天,他应该在两个日期范围的输出中列出两次。如果 E1 连续工作了 9 天(11/1 到 11/9),他应该只列出一次,日期范围为 11/1 到 11/9。
我已经看到了类似的问题,但没有一个问题完全适合我。我的数据库是 Oracle 10G,没有 PL/SQL。