Part | Quantity|Mapping |First_Date|Las_Date 6684MC6906 | 1 |-> CID-29-JAN-21-15-AUG-22 -> FEATURE-25-NOV-15-15-AUG-22 -> FSD PHANTOM SUBASSY-12-SEP-17-20-SEP-21 -> FSD PHANTOM SUBASSY-07-JUN-17-20-OCT-21 -> FSD PHANTOM SUBASSY-06-APR-12-15-AUG-22| | 6684MC6906 | 1 |-> CID-29-JAN-21-15-AUG-22 -> FEATURE-25-NOV-15-15-AUG-22 -> FSD PHANTOM SUBASSY-20-SEP-21-15-AUG-22 -> FSD PHANTOM SUBASSY-22-JUN-21-20-OCT-21 -> FSD PHANTOM SUBASSY-06-APR-12-15-AUG-22| |
I need a query which will Update the Start_Date and End_Date in this table. By Checking the Mapping column.When the value of date starts to change that should become the new start and end date.
For example :
Record_1 -> CID-29-JAN-21-15-AUG-22 -> FEATURE-25-NOV-15-15-AUG-22 -> FSD PHANTOM SUBASSY-12-SEP-17-20-SEP-21 -> FSD PHANTOM SUBASSY-07-JUN-17-20-OCT-21 -> FSD PHANTOM SUBASSY-06-APR-12-15-AUG-22 Record_2 -> CID-29-JAN-21-15-AUG-22 -> FEATURE-25-NOV-15-15-AUG-22 -> FSD PHANTOM SUBASSY-20-SEP-21-15-AUG-22 -> FSD PHANTOM SUBASSY-22-JUN-21-20-OCT-21 -> FSD PHANTOM SUBASSY-06-APR-12-15-AUG-22.
The above two are same till the part 25-NOV-15-15-AUG-22
.
So our new Start_date for 1st record should be =12-SEP-17
and End_date should be =20-SEP-21
.
For second record Start_date =20-SEP-21
and 15-AUG-22
.
Please let me know if any clarification needed. I’ll try my best to explain.
Below are the table scripts and insert statements.
create table bom_duplicates ( LVL NUMBER, TOP_PART VARCHAR2(300 BYTE), ASSEMBLY_ITEM_ID NUMBER, FLAT_COMPONENT VARCHAR2(300 BYTE), COMPONENT_ID NUMBER, ORGANIZATION_ID NUMBER, USAGE_QUANTITY NUMBER, PLANNING_FACTOR NUMBER, TRUE_TOP_PART VARCHAR2(300 BYTE), PATH_USAGE_QUANTITY VARCHAR2(4000 BYTE), TYPE_PATH VARCHAR2(4000 BYTE), PATH_START_DATE VARCHAR2(4000 BYTE), ORGANIZATION_CODE VARCHAR2(180 BYTE), PARENT_MAKE_BUY_CODE VARCHAR2(40 BYTE), CHILD_MAKE_BUY_CODE VARCHAR2(40 BYTE), START_DATE DATE, END_DATE DATE, ITEM_TYPE VARCHAR2(90 BYTE), PARENT_ITEM_TYPE VARCHAR2(90 BYTE) ); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'007-9714401',17644,10007,6,100,'6684MC6906','*1*1*1*6',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-25-NOV-15-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'007-9714401',17644,10007,6,100,'6684MC6906','*1*1*1*6',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-27-JUN-16-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'009-0006590',18027,10007,14,100,'6684MC6906','*1*1*1*14',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-25-NOV-15-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'009-0006590',18027,10007,14,100,'6684MC6906','*1*1*1*14',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-27-JUN-16-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'009-0006591',18028,10007,4,100,'6684MC6906','*1*1*1*4',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-25-NOV-15-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'009-0006591',18028,10007,4,100,'6684MC6906','*1*1*1*4',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-27-JUN-16-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'009-0030192',22158,10007,2,100,'6684MC6906','*1*1*1*2',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-25-NOV-15-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'009-0030192',22158,10007,2,100,'6684MC6906','*1*1*1*2',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-27-JUN-16-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'445-0754353',116356,10007,1,100,'6684MC6906','*1*1*1*1',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-25-NOV-15-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'445-0754353',116356,10007,1,100,'6684MC6906','*1*1*1*1',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-27-JUN-16-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'445-0754507',116441,10007,2,100,'6684MC6906','*1*1*1*2',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-25-NOV-15-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'445-0754507',116441,10007,2,100,'6684MC6906','*1*1*1*2',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-27-JUN-16-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'445-0754508',116442,10007,2,100,'6684MC6906','*1*1*1*2',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-25-NOV-15-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'445-0754508',116442,10007,2,100,'6684MC6906','*1*1*1*2',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-27-JUN-16-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'445-0754509',116443,10007,1,100,'6684MC6906','*1*1*1*1',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-25-NOV-15-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'445-0754509',116443,10007,1,100,'6684MC6906','*1*1*1*1',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-27-JUN-16-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'445-0761622',122703,10007,1,100,'6684MC6906','*1*1*1*1',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-25-NOV-15-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'445-0761622',122703,10007,1,100,'6684MC6906','*1*1*1*1',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-27-JUN-16-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'445-0763050',123517,10007,1,100,'6684MC6906','*1*1*1*1',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-25-NOV-15-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'445-0763050',123517,10007,1,100,'6684MC6906','*1*1*1*1',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-27-JUN-16-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'445-0763319',123628,10007,1,100,'6684MC6906','*1*1*1*1',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-25-NOV-15-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY'); Insert into BOM_DUPLICATES (LVL,TOP_PART,ASSEMBLY_ITEM_ID,FLAT_COMPONENT,COMPONENT_ID,ORGANIZATION_ID,USAGE_QUANTITY,PLANNING_FACTOR,TRUE_TOP_PART,PATH_USAGE_QUANTITY,TYPE_PATH,PATH_START_DATE,ORGANIZATION_CODE,PARENT_MAKE_BUY_CODE,CHILD_MAKE_BUY_CODE,START_DATE,END_DATE,ITEM_TYPE,PARENT_ITEM_TYPE) values (4,'445-0773300',127180,'445-0763319',123628,10007,1,100,'6684MC6906','*1*1*1*1',' -> CID -> FEATURE -> FSD PHANTOM SUBASSY -> FSD PHANTOM SUBASSY',' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-27-JUN-16-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22','BUD','Make','Buy',to_date('22-NOV-18','DD-MON-RR'),to_date('15-AUG-22','DD-MON-RR'),'FSD BUY RAW MAT','FSD PHANTOM SUBASSY');
Advertisement
Answer
You can use:
MERGE INTO bom_duplicates dst USING ( WITH numbered_parts (rid, component_id, path_start_date, rn) AS ( SELECT rowid, component_id, path_start_date, ROW_NUMBER() OVER (PARTITION BY component_id ORDER BY rowid) FROM bom_duplicates ), matched_parts (rid1, rid2, path_start_date1, path_start_date2) AS ( SELECT p1.rid, p2.rid, p1.path_start_date, p2.path_start_date FROM numbered_parts p1 INNER JOIN numbered_parts p2 ON (p1.component_id = p2.component_id) WHERE p1.rn = 1 AND p2.rn = 2 ), paths (rid1, rid2, path_start_date1, path_start_date2, idx, path1, path2, num_paths) AS ( SELECT rid1, rid2, path_start_date1, path_start_date2, 2, REGEXP_SUBSTR(path_start_date1, '[^>]+', 1, 2), REGEXP_SUBSTR(path_start_date2, '[^>]+', 1, 2), GREATEST( REGEXP_COUNT(path_start_date1, '[^>]+'), REGEXP_COUNT(path_start_date2, '[^>]+') ) FROM matched_parts UNION ALL SELECT rid1, rid2, path_start_date1, path_start_date2, idx + 1, REGEXP_SUBSTR(path_start_date1, '[^>]+', 1, idx + 1), REGEXP_SUBSTR(path_start_date2, '[^>]+', 1, idx + 1), num_paths FROM paths WHERE idx < num_paths AND path1 = path2 ), changed_dates (rid1, rid2, start_date1, end_date1, start_date2, end_date2) AS ( SELECT rid1, rid2, TO_DATE( REGEXP_SUBSTR( path1, '(d{2}-[A-Z]{3}-d{2})-(d{2}-[A-Z]{3}-d{2})', 1, 1, NULL, 1 ), 'DD-MON-RR' ) AS start_date1, TO_DATE( REGEXP_SUBSTR( path1, '(d{2}-[A-Z]{3}-d{2})-(d{2}-[A-Z]{3}-d{2})', 1, 1, NULL, 2 ), 'DD-MON-RR' ) AS end_date1, TO_DATE( REGEXP_SUBSTR( path2, '(d{2}-[A-Z]{3}-d{2})-(d{2}-[A-Z]{3}-d{2})', 1, 1, NULL, 1 ), 'DD-MON-RR' ) AS start_date2, TO_DATE( REGEXP_SUBSTR( path2, '(d{2}-[A-Z]{3}-d{2})-(d{2}-[A-Z]{3}-d{2})', 1, 1, NULL, 2 ), 'DD-MON-RR' ) AS end_date2 FROM paths WHERE path1 <> path2 ) SELECT rid, start_date, end_date FROM changed_dates UNPIVOT ( (rid, start_date, end_date) FOR type IN ( (rid1, start_date1, end_date1) AS 1, (rid2, start_date2, end_date2) AS 2 ) ) ) src ON (dst.ROWID = src.rid) WHEN MATCHED THEN UPDATE SET start_date = src.start_date, end_date = src.end_date;
Which, for your sample data, then:
SELECT component_id, start_date, end_date FROM bom_duplicates;
Outputs:
COMPONENT_ID START_DATE END_DATE 17644 25-NOV-15 15-AUG-22 17644 27-JUN-16 15-AUG-22 18027 25-NOV-15 15-AUG-22 18027 27-JUN-16 15-AUG-22 18028 25-NOV-15 15-AUG-22 18028 27-JUN-16 15-AUG-22 22158 25-NOV-15 15-AUG-22 22158 27-JUN-16 15-AUG-22 116356 25-NOV-15 15-AUG-22 116356 27-JUN-16 15-AUG-22 116441 25-NOV-15 15-AUG-22 116441 27-JUN-16 15-AUG-22 116442 25-NOV-15 15-AUG-22 116442 27-JUN-16 15-AUG-22 116443 25-NOV-15 15-AUG-22 116443 27-JUN-16 15-AUG-22 122703 25-NOV-15 15-AUG-22 122703 27-JUN-16 15-AUG-22 123517 25-NOV-15 15-AUG-22 123517 27-JUN-16 15-AUG-22 123628 25-NOV-15 15-AUG-22 123628 27-JUN-16 15-AUG-22
db<>fiddle here