oracle中日期重叠时拆分记录
我会尽力解释我的水平 我对日期重叠问题有异议。我使用的是Oracle 18.11版本 我有一个emp表,员工职位短期内会发生变化。因此,无论员工何时调到其他职位,日期仍然与“开始日期”和“结束日期”重叠 这是DDLoracle中日期重叠时拆分记录,oracle,Oracle,我会尽力解释我的水平 我对日期重叠问题有异议。我使用的是Oracle 18.11版本 我有一个emp表,员工职位短期内会发生变化。因此,无论员工何时调到其他职位,日期仍然与“开始日期”和“结束日期”重叠 这是DDL CREATE TABLE emp_pdate ( EMP_POS_ID VARCHAR2(10 ), EMP_NUM NUMBER, POSITION_NUM VARCHAR2(20 ), MANAGER_N VARCHAR2(20 ), DE
CREATE TABLE emp_pdate (
EMP_POS_ID VARCHAR2(10 ),
EMP_NUM NUMBER,
POSITION_NUM VARCHAR2(20 ),
MANAGER_N VARCHAR2(20 ),
DEPT VARCHAR2(20 ),
LEVEL_IN VARCHAR2(10 ),
DIV_UNIT VARCHAR2(10 ),
FROM_DATE DATE,
TO_DATE DATE
);
Insert into emp_pdate (EMP_POS_ID,EMP_NUM,POSITION_NUM,MANAGER_N,DEPT,LEVEL_IN,DIV_UNIT,FROM_DATE,TO_DATE) values ('521',12345,'REG1','Mango','bank','L1','ABB',to_date('31/01/19','DD/MM/YYYY'),to_date('15/03/20','DD/MM/YYYY'));
Insert into emp_pdate (EMP_POS_ID,EMP_NUM,POSITION_NUM,MANAGER_N,DEPT,LEVEL_IN,DIV_UNIT,FROM_DATE,TO_DATE) values ('662',12345,'REG2','Apple','estate','L2','ACC',to_date('01/04/19','DD/MM/YYYY'),to_date('05/04/19','DD/MM/YYYY'));
--Insert into EMP_POS (EMP_POS_ID,EMP_NUM,POSITION_NUM,MANAGER_N,DEPT,LEVEL_IN,DIV_UNIT,FROM_DATE,TO_DATE) values ('673',12345,'REG2','Mango','bank','L2','ACC',to_date('15/04/19','DD/MM/YYYY'),to_date('30/06/19','DD/MM/YYYY'));
Insert into emp_pdate (EMP_POS_ID,EMP_NUM,POSITION_NUM,MANAGER_N,DEPT,LEVEL_IN,DIV_UNIT,FROM_DATE,TO_DATE) values ('144',12345,'REG2','Apple','estate','L2','ACC',to_date('01/07/19','DD/MM/YYYY'),to_date('24/07/19','DD/MM/YYYY'));
Insert into emp_pdate (EMP_POS_ID,EMP_NUM,POSITION_NUM,MANAGER_N,DEPT,LEVEL_IN,DIV_UNIT,FROM_DATE,TO_DATE) values ('255',12345,'REG2','Apple','estate','L2','ACC',to_date('25/07/19','DD/MM/YYYY'),to_date('25/07/19','DD/MM/YYYY'));
Insert into emp_pdate (EMP_POS_ID,EMP_NUM,POSITION_NUM,MANAGER_N,DEPT,LEVEL_IN,DIV_UNIT,FROM_DATE,TO_DATE) values ('986',12345,'REG2','Apple','estate','L2','ACC',to_date('25/07/19','DD/MM/YYYY'),to_date('27/07/19','DD/MM/YYYY'));
Insert into emp_pdate (EMP_POS_ID,EMP_NUM,POSITION_NUM,MANAGER_N,DEPT,LEVEL_IN,DIV_UNIT,FROM_DATE,TO_DATE) values ('987',12345,'REG2','Apple','estate','L2','ACC',to_date('26/07/19','DD/MM/YYYY'),to_date('26/07/19','DD/MM/YYYY'));
比如说。员工REG2的位置与REG1重叠,在这种情况下,我希望将REG1的结束日期保持在REG2开始前一天
REG2的位置只是一天,然后REG1从第二天开始,直到他改变位置
这是源表
emp_pos_id emp_num position manager from_date to_date dept level div_unit
521 012345 REG1 mango 31/01/2019 15/03/2020 bank L1 abb
662 012345 REG2 apple 01/04/2019 05/04/2019 estate L2 acc
144 012345 REG2 apple 01/07/2019 24/07/2019 estate L2 acc
255 012345 REG2 apple 25/07/2019 25/07/2019 estate L2 acc
986 012345 REG2 apple 25/07/2019 27/07/2019 estate L2 acc
987 012345 REG2 apple 26/07/2019 26/07/2019 estate L2 acc
我希望数据是这样的。我们需要将记录拆分为重叠的记录
emp_pos_id emp_num emp_pos manager from_date to_date dept level div_unit
521 012345 REG1 mango 31/01/2020 31/03/2020 bank L1 abb
662 012345 REG2 apple 01/04/2019 05/04/2019 estate L2 acc
988 012345 REG1 mango 06/04/2019 30/06/2019 bank L1 abb
144 012345 REG2 apple 01/07/2019 24/07/2019 estate L2 acc
255 012345 REG2 apple 25/07/2019 25/07/2019 estate L2 acc
986 012345 REG2 apple 27/07/2019 27/07/2019 estate L2 acc
987 012345 REG2 apple 26/07/2019 26/07/2019 estate L2 acc
989 012345 REG1 mango 27/07/2019 15/03/2020 bank L1 abb
emp_pos_id是一个序列号,对于新记录,而对于旧记录,它是相同的
我试着写一些类似的东西,但它没有显示出预期的结果/
选择EMP\u POS\u ID、EMP\u NUM、POSITION\u NUM、MANAGER\N、DEPT、LEVEL\u IN、DIV\u UNIT、FROM\u DATE、
案例:何时开始(从开始日期)到结束日期
潜在客户(从第1天起)超过(从第1天起按订单)
截至年月日的其他日期
迄今为止
来自emp_更新
如果有人能帮我,我将不胜感激
提前谢谢