Oracle sql查询将两组日期按顺序分组
我有下一张桌子: 雇员 代码 开始日期 结束日期 02097368 F7H3 09/07/2018 20/10/2018 02097368 F7H3 21/10/2018 05/01/2019 02097368 F7H3 06/01/2019 12/01/2019 02097368 F7H3 13/01/2019 02/02/2019 02097368 F7H3 03/02/2019 13/04/2019 02097368 F7S3 14/04/2019 04/01/2020 02097368 F7S3 05/01/2020 24/03/2020 02097368 F7S3 31/01/2021Oracle sql查询将两组日期按顺序分组,sql,oracle,plsql,oracle11g,Sql,Oracle,Plsql,Oracle11g,我有下一张桌子: 雇员 代码 开始日期 结束日期 02097368 F7H3 09/07/2018 20/10/2018 02097368 F7H3 21/10/2018 05/01/2019 02097368 F7H3 06/01/2019 12/01/2019 02097368 F7H3 13/01/2019 02/02/2019 02097368 F7H3 03/02/2019 13/04/2019 02097368 F7S3 14/04/2019 04/01/2020 02097368
我用下面的查询解决了这个问题,虽然我知道这不是最优雅的一个。请将表_1替换为保存数据的实际表名或视图 运行以下命令时,我检索到以下结果
SELECT EMPLOYEE, CODE, MIN(START_DATE), MAX(END_DATE) FROM
(
SELECT EMPLOYEE, CODE, START_DATE, END_DATE, CASE
WHEN (TEMP1=1 OR TEMP2=1) THEN 'ONE_CLASS'
ELSE 'OTHER' END CLASS_X
FROM
(SELECT EMPLOYEE, CODE,
START_DATE, END_DATE,
X AS TEMP1, LEAD(X) OVER (ORDER BY START_DATE) AS TEMP2
FROM (
SELECT EMPLOYEE, CODE,
LAG(END_DATE) OVER (ORDER BY START_DATE) AS PREV_PERIOD_END_DATE,
START_DATE, END_DATE,
START_DATE - LAG(END_DATE) OVER (ORDER BY START_DATE) AS X
FROM TABLE_2
ORDER BY START_DATE) A
) B
) C
GROUP BY EMPLOYEE, CODE, CLASS_X
ORDER BY MIN(START_DATE)
结果:
结果为文本形式,我不知道如何将其格式化为表格:
员工代码最小值(开始日期)最大值(结束日期)
02097368 F7H3 09-JUL-18 13-APR-19
02097368 F7S3 14-APR-19 24-MAR-20
02097368 F7S3 31-JAN-21-你的意思是“如果第N行的开始日期在第N-1行之后一天,则将这两行视为一行/好像日期范围是连续的?确切地说,只有当代码不同或日期范围不连续时才开始新行。这看起来会产生2行,而不是提问者要找的3行。是的,你是对的!抱歉,我现在就修改这个