WITH tdr AS ( SELECT DATERANGE('2020-05-01','2021-05-01','[)') drange ,DATERANGE('2020-05-01' + ('1 year'::interval),'2021-05-01' + ('1 year'::interval),'[)') repl ,'1 year'::interval AS incr ,(SELECT jsonb_agg(x.v) FROM (VALUES('copy'),('actuals'),('actuals plug'),('adj price'),('adj volume')) AS x(v)) iter ) ,remove AS ( SELECT -----------documents------------- null::int "ddord#" ,null::int "dditm#" ,null::int "fgbol#" ,null::int "fgent#" ,null::int "diinv#" ,null::int "dilin#" ,null::int quoten ,null::int quotel ----------dates/status------------------ ,o.odate dcodat ,o.rdate ddqdat ,null::date dcmdat ,null::date fesdat ,o.dhidat ,null::text fesind ,null::text dhpost ,o.fspr -----------measures-------------------- ,null::numeric ddqtoi ,null::numeric ddqtsi ,null::numeric fgqshp ,null::numeric diqtsh ,null::numeric diext ,null::numeric ditdis ,null::jsonb discj ,null::text dhincr ,o.plnt ,o.promo ,o.return_reas ,o.terms ,null::text custpo ,null::text remit_to ,null::text bill_class ,o.bill_cust ,null::text bill_rep ,null::text bill_terr ,null::text ship_class ,o.ship_cust ,null::text ship_rep ,null::text ship_terr ,o.dsm ,null::text account ,null::text shipgrp ,null::text geo ,null::text chan ,null::text chansub ,null::text orig_ctry ,null::text orig_prov ,null::text orig_post ,null::text bill_ctry ,null::text bill_prov ,null::text bill_post ,null::text dest_ctry ,null::text dest_prov ,null::text dest_post ,o.part ,null::text styc ,null::text colc ,null::text colgrp ,null::text coltier ,null::text colstat ,null::text sizc ,null::text pckg ,null::text kit ,null::text brnd ,null::text majg ,null::text ming ,null::text majs ,null::text mins ,null::text gldco ,null::text gldc ,null::text glec ,null::text harm ,null::text clss ,null::text brand ,null::text assc ,null::text ddunit ,null::text unti ,null::numeric lbs ,null::numeric plt ,null::text plcd ,o.fs_line ,o.r_currency ,o.r_rate ,o.c_currency ,o.c_rate ,-sum(o.fb_qty) fb_qty ,-sum(o.fb_val_loc) fb_val_loc ,-sum(o.fb_val_loc_dis) fb_val_loc_dis ,-sum(o.fb_val_loc_qt) fb_val_loc_qt ,-sum(o.fb_val_loc_pl) fb_val_loc_pl ,-sum(o.fb_val_loc_tar) fb_val_loc_tar ,-sum(o.fb_cst_loc) fb_cst_loc ,-sum(o.fb_cst_loc_cur) fb_cst_loc_cur ,-sum(o.fb_cst_loc_fut) fb_cst_loc_fut ,o.calc_status ,o.flag ,o.odate ,o.oseas ,o.rdate ,o.rseas -----when null, greatest/least is just going to act like coalesce ,o.sdate ,o.sseas ,o.version ,o.iter FROM rlarp.osmf_dev o CROSS JOIN tdr WHERE --collect all the rows in the base period and --the destination slot for the new rows o.odate <@ tdr.drange OR o.odate <@ tdr.repl GROUP BY o.odate ,o.rdate ,o.dhidat ,o.fspr ,o.plnt ,o.promo ,o.return_reas ,o.terms ,o.bill_cust ,o.ship_cust ,o.dsm ,o.part ,o.fs_line ,o.r_currency ,o.r_rate ,o.c_currency ,o.c_rate ,o.calc_status ,o.flag ,o.odate ,o.oseas ,o.rdate ,o.rseas ,o.sdate ,o.sseas ) ,stack AS ( SELECT * FROM rlarp.osmf_stage UNION ALL SELECT * FROM remove ) ,merge_diff AS ( SELECT -----------documents------------- null::int "ddord#" ,null::int "dditm#" ,null::int "fgbol#" ,null::int "fgent#" ,null::int "diinv#" ,null::int "dilin#" ,null::int quoten ,null::int quotel ----------dates/status------------------ ,o.odate dcodat ,o.rdate ddqdat ,null::date dcmdat ,null::date fesdat ,o.dhidat ,null::text fesind ,null::text dhpost ,o.fspr -----------measures-------------------- ,null::numeric ddqtoi ,null::numeric ddqtsi ,null::numeric fgqshp ,null::numeric diqtsh ,null::numeric diext ,null::numeric ditdis ,null::jsonb discj ,null::text dhincr ,o.plnt ,o.promo ,o.return_reas ,o.terms ,null::text custpo ,null::text remit_to ,null::text bill_class ,o.bill_cust ,null::text bill_rep ,null::text bill_terr ,null::text ship_class ,o.ship_cust ,null::text ship_rep ,null::text ship_terr ,o.dsm ,null::text account ,null::text shipgrp ,null::text geo ,null::text chan ,null::text chansub ,null::text orig_ctry ,null::text orig_prov ,null::text orig_post ,null::text bill_ctry ,null::text bill_prov ,null::text bill_post ,null::text dest_ctry ,null::text dest_prov ,null::text dest_post ,o.part ,null::text styc ,null::text colc ,null::text colgrp ,null::text coltier ,null::text colstat ,null::text sizc ,null::text pckg ,null::text kit ,null::text brnd ,null::text majg ,null::text ming ,null::text majs ,null::text mins ,null::text gldco ,null::text gldc ,null::text glec ,null::text harm ,null::text clss ,null::text brand ,null::text assc ,null::text ddunit ,null::text unti ,null::numeric lbs ,null::numeric plt ,null::text plcd ,o.fs_line ,o.r_currency ,o.r_rate ,o.c_currency ,o.c_rate ,sum(o.fb_qty) fb_qty ,sum(o.fb_val_loc) fb_val_loc ,sum(o.fb_val_loc_dis) fb_val_loc_dis ,sum(o.fb_val_loc_qt) fb_val_loc_qt ,sum(o.fb_val_loc_pl) fb_val_loc_pl ,sum(o.fb_val_loc_tar) fb_val_loc_tar ,sum(o.fb_cst_loc) fb_cst_loc ,sum(o.fb_cst_loc_cur) fb_cst_loc_cur ,sum(o.fb_cst_loc_fut) fb_cst_loc_fut ,o.calc_status ,o.flag ,o.odate ,o.oseas ,o.rdate ,o.rseas -----when null, greatest/least is just going to act like coalesce ,o.sdate ,o.sseas ,'actuals' ,'merge' FROM stack WHERE --collect all the rows in the base period and --the destination slot for the new rows o.odate <@ tdr.drange OR o.odate <@ tdr.repl GROUP BY o.odate ,o.rdate ,o.dhidat ,o.fspr ,o.plnt ,o.promo ,o.return_reas ,o.terms ,o.bill_cust ,o.ship_cust ,o.dsm ,o.part ,o.fs_line ,o.r_currency ,o.r_rate ,o.c_currency ,o.c_rate ,o.calc_status ,o.flag ,o.odate ,o.oseas ,o.rdate ,o.rseas ,o.sdate ,o.sseas ) SELECT COUNT(*) from merge_deff