以下のようなデータを持つテーブルがあります
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
出力の日付範囲を使用して、コード W で 5 日間連続して働いた日付範囲 (過去 3 か月間など) の従業員のリストを取得したいと考えています。各従業員は、異なるコードを持つ 1 日の複数のレコードを持つことができます。
期待される出力は
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 日間勤務した場合、彼は両方の日付範囲で出力に 2 回リストされるはずです。E1 が連続して 9 日間 (11/1 から 11/9) 働いた場合、彼は 11/1 から 11/9 の日付範囲で 1 回だけリストされます。
私はすでに似たような質問を見てきましたが、どれも正確にはうまくいきませんでした。私のデータベースは Oracle 10G で、PL/SQL はありません。