我有一张表格,其中列出了员工活跃/不活跃的日期,我想计算员工在特定日期范围内活跃的周数。
因此表 (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
查询需要向我显示此 empid 从 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;
问题是我似乎无法弄清楚如何创建一个查询语句,该语句将遍历特定日期范围内每个员工的所有行,并只返回每个 empid 以及它们处于活动状态的周数。我更喜欢使用基本 SQL 而不是 PL/SQL,以便我可以将其传输到可由用户运行的 PeopleSoft 查询,但如果需要,我愿意使用 Oracle SQL Developer 为用户运行它。
数据库:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production