従業員がアクティブ/非アクティブになった日付のリストを含むテーブルがあり、特定の日付範囲内で従業員がアクティブであった週をカウントしたいと考えています。
したがって、テーブル (ps_job) の値は次のようになります。
EMPLID EFFDT HR_STATUS
------ ----- ------
1000 01-Jul-11 A
1000 01-Sep-11 I
1000 01-Jan-12 A
1000 01-Mar-12 I
1000 01-Sep-12 A
このクエリでは、この emplid が 2011 年 7 月 1 日から 2012 年 12 月 31 日までアクティブだった週数を表示する必要があります。
望ましい結果セットは次のようになります。
EMPLID WEEKS_ACTIVE
------ ------------
1000 35
以下の SQL の結果を追加して、35 という数字を取得しました。
SELECT (NEXT_DAY('01-Sep-11','SUNDAY') - NEXT_DAY('01-Jul-11','SUNDAY'))/7 WEEKS_ACTIVE FROM DUAL;
SELECT (NEXT_DAY('01-Mar-12','SUNDAY') - NEXT_DAY('01-Jan-12','SUNDAY'))/7 WEEKS_ACTIVE FROM DUAL;
SELECT (NEXT_DAY('31-Dec-12','SUNDAY') - NEXT_DAY('01-Sep-12','SUNDAY'))/7 WEEKS_ACTIVE FROM DUAL;
問題は、特定の日付範囲内のすべての従業員のすべての行を調べて、各 emplid とアクティブな週数を返す単一のクエリ ステートメントを作成する方法を理解できないようです。ユーザーが実行できる PeopleSoft クエリに転送できるように、PL/SQL ではなく基本的な SQL を使用したいと考えていますが、必要に応じて Oracle SQL Developer を使用してユーザーのために SQL を実行したいと考えています。
データベース: Oracle Database 11g Enterprise Edition リリース 11.2.0.3.0 - 64 ビット製品