diff --git a/offline/baseline_orphans.pg.sql b/offline/baseline_orphans.pg.sql index f71f488..65c994a 100644 --- a/offline/baseline_orphans.pg.sql +++ b/offline/baseline_orphans.pg.sql @@ -139,291 +139,291 @@ CREATE TABLE rlarp.orphans AS ( -- ) -- -- select * from checkc -- -- SELECT cust, sum(fb_qty) FROM newc LEFT OUTER JOIN profile ON shipgrp = cust GROUP by cust --- ----grouped prices------------- --- ,npgrp AS ( --- SELECT --- o.bill_dba --- ,o.ship_dba --- ,o.bill_cust --- ,o.ship_cust --- ,o.promo --- ,o.terms --- ,o.dsm --- ,o.part --- ,o.odate --- ,o.qtyord --- ,i.nwht * CASE WHEN i.nwun = 'KG' THEN 2.2 ELSE 1 END lbs --- ,i.mpck pltq --- ,ROUND(o.sales_usd / o.qty,5) price --- ,(o.pricing->>'guidance_price')::NUMERIC guidance --- ,(o.pricing->>'floor' )::numeric(15,5) floor --- ,(o.pricing->>'ceiling')::numeric(15,5) ceiling --- ,(o.pricing->>'uselimits')::boolean uselimits --- FROM --- rlarp.osm_stack o --- INNER JOIN "CMS.CUSLG".itemm i ON --- i.item = o.part --- INNER JOIN checkc c ON --- c.shipgrp = o.customer --- AND c.oseas = o.oseas --- WHERE --- VERSION = 'Actual' --- AND o.oseas >= 2018 --- AND calc_status <> 'CANCELED' --- AND o.fs_line = '41010' --- AND o.part <> '' --- AND substring(o.glec,1,1) <= '2' --- AND o.qty <> 0 --- AND o.sseas IS NOT NULL --- -- AND customer in (select distinct renamed FROM newc ) --- GROUP BY --- o.bill_dba --- ,o.ship_dba --- ,o.dsm --- ,i.partgroup --- ,i.pricegroup --- ,o.part --- ,o.odate --- ,o.qtyord --- ,o.pounds --- ,o.pallets --- ,ROUND(o.sales_usd / o.qty,5) --- ,i.nwht * CASE WHEN i.nwun = 'KG' THEN 2.2 ELSE 1 END --- ,i.mpck --- ,(o.pricing->>'guidance_price')::NUMERIC --- ,(o.pricing->>'floor' )::numeric(15,5) --- ,(o.pricing->>'ceiling')::numeric(15,5) --- ,(o.pricing->>'uselimits')::boolean --- ) --- ----sequenced for most recent price------------ --- ,nseq AS ( --- SELECT --- bill_dba --- ,ship_dba --- ,part --- ,odate --- ,qtyord --- ,lbs --- ,pltq --- ,price --- ,guidance --- ,floor --- ,ceiling --- ,uselimits --- ,row_number() OVER (PARTITION BY bill_dba, ship_dba, part ORDER BY odate desc) rn --- ,round(avg(price) over (PARTITION BY bill_dba, ship_dba, part),5) avgprice --- FROM --- npgrp --- ) --- -- SELECT * FROM seq WHERE rn = 1 --- ,ngrp AS ( --- SELECT --- sg.fspr --- ,i.dplt --- ,o.promo --- ,o.terms --- ,o.bill_cust --- ,o.ship_cust --- ,o.dsm --- ,o.dsm --- ,null:: director --- ,o.account --- ,o.shipgrp --- ,o.chan --- ,o.chansub --- ,null::channel_retail --- ,i.partgroup --- ,i.pricegroup --- ,o.part --- ,o.part || ' - ' || i.descr --- ,i.partgroup --- ,i.branding --- ,i.majgd majg_descr --- ,i.mingd ming_descr --- ,i.majsd majs_descr --- ,i.minsd mins_descr --- ,seg.segm --- ,CASE WHEN i.majg = '610' THEN 'Fiber' ELSE 'Plastic' END substance --- ,o.fs_line --- ,o.r_currency --- ,rx.rate r_rate --- ,pl.curr c_currency --- ,rx.rate r_rate --- ,pl.curr c_currency --- ,cx.rate c_rate --- ,ROUND(sum(fb_qty * lbs),5) lbs --- ,ROUND(sum(fb_qty),2) qty --- ,ROUND(sum(fb_val_loc * r_rate),2) sales_usd --- ,ROUND(sum(fb_cst_loc_cur * c_rate),2) cost_curstd_usd --- ,'CLOSED' calc_status --- ,'SHIPMENT' flag --- ,o.odate --- ,o.oseas --- ,o.odate --- ,og.sortmo omon --- ,o.sseas --- ,o.sdate --- ,sg.sortmo smon --- -- ,o.calc_status --- FROM --- profile o --- LEFT OUTER JOIN rlarp.gld og ON --- o.odate BETWEEN og.sdat and og.edat --- LEFT OUTER JOIN rlarp.gld sg ON --- o.sdate BETWEEN sg.sdat and sg.edat --- LEFT OUTER JOIN "CMS.CUSLG".itemm i ON --- i.item = o.part --- LEFT OUTER JOIN seg ON --- seg.glec = i.glec --- LEFT OUTER JOIN rlarp.plpr pl ON --- pl.plnt = i.dplt --- LEFT OUTER JOIN rlarp.ffcret cx ON --- cx.perd = pl.gl AND --- cx.rtyp = 'MA' AND --- cx.fcur = pl.curr AND --- cx.tcur = 'US' --- LEFT OUTER JOIN rlarp.ffcret rx ON --- rx.perd = pl.gl AND --- rx.rtyp = 'MA' AND --- rx.fcur = b.r_currency AND --- rx.tcur = 'US' --- WHERE --- true --- -- iter IN ('actuals','actuals_plug','copy') --- AND fs_line = '41010' --- AND substring(o.glec,1,1) <= '2' --- AND o.calc_status <> 'CANCELED' --- AND o.sseas IS NOT NULL --- GROUP BY --- o.account --- ,o.shipgrp --- ,o.chan --- ,o.dsm --- ,i.partgroup --- ,i.pricegroup --- ,o.part --- ,o.glec --- ,o.oseas --- ,o.odate --- ,og.sortmo --- ,o.sseas --- ,o.sdate --- ,sg.sortmo --- -- ,o.calc_status --- ) --- -- SELECT * FROM ngrp --- ,nguid AS ( +----grouped prices------------- +,npgrp AS ( + SELECT + o.bill_dba + ,o.ship_dba + ,o.bill_cust + ,o.ship_cust + ,o.promo + ,o.terms + ,o.dsm + ,o.part + ,o.odate + ,o.qtyord + ,i.nwht * CASE WHEN i.nwun = 'KG' THEN 2.2 ELSE 1 END lbs + ,i.mpck pltq + ,ROUND(o.sales_usd / o.qty,5) price + ,(o.pricing->>'guidance_price')::NUMERIC guidance + ,(o.pricing->>'floor' )::numeric(15,5) floor + ,(o.pricing->>'ceiling')::numeric(15,5) ceiling + ,(o.pricing->>'uselimits')::boolean uselimits + FROM + rlarp.osm_stack o + INNER JOIN "CMS.CUSLG".itemm i ON + i.item = o.part + INNER JOIN checkc c ON + c.shipgrp = o.customer + AND c.oseas = o.oseas + WHERE + VERSION = 'Actual' + AND o.oseas >= 2018 + AND calc_status <> 'CANCELED' + AND o.fs_line = '41010' + AND o.part <> '' + AND substring(o.glec,1,1) <= '2' + AND o.qty <> 0 + AND o.sseas IS NOT NULL + -- AND customer in (select distinct renamed FROM newc ) + GROUP BY + o.bill_dba + ,o.ship_dba + ,o.dsm + ,i.partgroup + ,i.pricegroup + ,o.part + ,o.odate + ,o.qtyord + ,o.pounds + ,o.pallets + ,ROUND(o.sales_usd / o.qty,5) + ,i.nwht * CASE WHEN i.nwun = 'KG' THEN 2.2 ELSE 1 END + ,i.mpck + ,(o.pricing->>'guidance_price')::NUMERIC + ,(o.pricing->>'floor' )::numeric(15,5) + ,(o.pricing->>'ceiling')::numeric(15,5) + ,(o.pricing->>'uselimits')::boolean +) +----sequenced for most recent price------------ +,nseq AS ( + SELECT + bill_dba + ,ship_dba + ,part + ,odate + ,qtyord + ,lbs + ,pltq + ,price + ,guidance + ,floor + ,ceiling + ,uselimits + ,row_number() OVER (PARTITION BY bill_dba, ship_dba, part ORDER BY odate desc) rn + ,round(avg(price) over (PARTITION BY bill_dba, ship_dba, part),5) avgprice + FROM + npgrp +) +-- SELECT * FROM seq WHERE rn = 1 +,ngrp AS ( + SELECT + sg.fspr + ,i.dplt + ,o.promo + ,o.terms + ,o.bill_cust + ,o.ship_cust + ,o.dsm + ,o.dsm + ,null:: director + ,o.account + ,o.shipgrp + ,o.chan + ,o.chansub + ,null::channel_retail + ,i.partgroup + ,i.pricegroup + ,o.part + ,o.part || ' - ' || i.descr + ,i.partgroup + ,i.branding + ,i.majgd majg_descr + ,i.mingd ming_descr + ,i.majsd majs_descr + ,i.minsd mins_descr + ,seg.segm + ,CASE WHEN i.majg = '610' THEN 'Fiber' ELSE 'Plastic' END substance + ,o.fs_line + ,o.r_currency + ,rx.rate r_rate + ,pl.curr c_currency + ,rx.rate r_rate + ,pl.curr c_currency + ,cx.rate c_rate + ,ROUND(sum(fb_qty * lbs),5) lbs + ,ROUND(sum(fb_qty),2) qty + ,ROUND(sum(fb_val_loc * r_rate),2) sales_usd + ,ROUND(sum(fb_cst_loc_cur * c_rate),2) cost_curstd_usd + ,'CLOSED' calc_status + ,'SHIPMENT' flag + ,o.odate + ,o.oseas + ,o.odate + ,og.sortmo omon + ,o.sseas + ,o.sdate + ,sg.sortmo smon + -- ,o.calc_status + FROM + profile o + LEFT OUTER JOIN rlarp.gld og ON + o.odate BETWEEN og.sdat and og.edat + LEFT OUTER JOIN rlarp.gld sg ON + o.sdate BETWEEN sg.sdat and sg.edat + LEFT OUTER JOIN "CMS.CUSLG".itemm i ON + i.item = o.part + LEFT OUTER JOIN seg ON + seg.glec = i.glec + LEFT OUTER JOIN rlarp.plpr pl ON + pl.plnt = i.dplt + LEFT OUTER JOIN rlarp.ffcret cx ON + cx.perd = pl.gl AND + cx.rtyp = 'MA' AND + cx.fcur = pl.curr AND + cx.tcur = 'US' + LEFT OUTER JOIN rlarp.ffcret rx ON + rx.perd = pl.gl AND + rx.rtyp = 'MA' AND + rx.fcur = b.r_currency AND + rx.tcur = 'US' + WHERE + true + -- iter IN ('actuals','actuals_plug','copy') + AND fs_line = '41010' + AND substring(o.glec,1,1) <= '2' + AND o.calc_status <> 'CANCELED' + AND o.sseas IS NOT NULL + GROUP BY + o.account + ,o.shipgrp + ,o.chan + ,o.dsm + ,i.partgroup + ,i.pricegroup + ,o.part + ,o.glec + ,o.oseas + ,o.odate + ,og.sortmo + ,o.sseas + ,o.sdate + ,sg.sortmo + -- ,o.calc_status +) +-- SELECT * FROM ngrp +,nguid AS ( + SELECT + grp.account + ,grp.shipgrp + ,grp.chan + ,r.repp dsm + ,r.director + ,grp.shipgrp||'.'||r.repp lu + -- ,grp.partgroup + -- ,grp.pricegroup + ,grp.part + -- ,grp.glec + ,2026 oseas + ,grp.omon + ,grp.odate + ,(2026- grp.oseas) + grp.sseas sseas + ,grp.smon + ,grp.sdate + ,grp.lbs + ,grp.qty + ,grp.sales_usd + ,CASE WHEN round(grp.sales_usd/grp.qty,5) = 0 THEN null ELSE round(grp.sales_usd/grp.qty,5) END hist_price + ,grp.cost_curstd_usd + ,sum(grp.lbs) OVER (PARTITION BY shipgrp, dsm) shiplbs + ,CASE WHEN seq.floor = 0 THEN null else seq.floor END floor + ,CASE WHEN seq.ceiling = 0 THEN null else seq.ceiling END ceiling + ,seq.uselimits + ,seq.price + ,seq.avgprice + ,seq.pltq + ,ROUND(CASE WHEN seq.uselimits THEN + CASE + WHEN glec = '1NU' THEN + --if more than 8/24 pallets, use floor + CASE WHEN grp.qty >= 24*seq.pltq THEN seq.floor + -- if more than a pallet use the target price + ELSE CASE WHEN qtyord >= 8*seq.pltq THEN (seq.ceiling + seq.floor) / 2 + -- if more than a pallet use the target price + ELSE CASE WHEN qtyord >= 2*seq.pltq THEN seq.ceiling + -- if more than a pallet use the target price + ELSE seq.ceiling * 1.05 + END END END + ELSE + CASE WHEN pricegroup ~ '(Hanger|Dish)' THEN + --at least 1 pallets is lower limit + CASE WHEN qtyord >= 01*seq.pltq THEN seq.floor + --at least 2 pallets is mid range + ELSE CASE WHEN qtyord >= 0.5*seq.pltq THEN (seq.ceiling + seq.floor) / 2 + --less than a pallet is upper + 15% + ELSE seq.ceiling + END END + ELSE + --at least 8 pallets is lower limit + CASE WHEN qtyord >= 08*seq.pltq THEN seq.floor + --at least 2 pallets is mid range + ELSE CASE WHEN qtyord >= 2*seq.pltq THEN (seq.ceiling + seq.floor) / 2 + --at least 1 pallet is upper range + ELSE CASE WHEN qtyord >= 1*seq.pltq THEN seq.ceiling + --less than a pallet is upper + 15% + ELSE seq.ceiling * 1.15 + END END END + END + END + ELSE + null + END,5) guid + FROM + ngrp grp + LEFT OUTER JOIN nseq seq ON + seq.ship_dba = grp.shipgrp + AND seq.bill_dba = grp.account + AND seq.part = grp.part + AND seq.rn = 1 + LEFT OUTER JOIN rlarp.repc r ON + r.rcode = grp.dsm +) +select * from nguid + +-- ,orphans AS ( -- SELECT --- grp.account --- ,grp.shipgrp --- ,grp.chan --- ,r.repp dsm --- ,r.director --- ,grp.shipgrp||'.'||r.repp lu --- -- ,grp.partgroup --- -- ,grp.pricegroup --- ,grp.part --- -- ,grp.glec --- ,2026 oseas --- ,grp.omon --- ,grp.odate --- ,(2026- grp.oseas) + grp.sseas sseas --- ,grp.smon --- ,grp.sdate --- ,grp.lbs --- ,grp.qty --- ,grp.sales_usd --- ,CASE WHEN round(grp.sales_usd/grp.qty,5) = 0 THEN null ELSE round(grp.sales_usd/grp.qty,5) END hist_price --- ,grp.cost_curstd_usd --- ,sum(grp.lbs) OVER (PARTITION BY shipgrp, dsm) shiplbs --- ,CASE WHEN seq.floor = 0 THEN null else seq.floor END floor --- ,CASE WHEN seq.ceiling = 0 THEN null else seq.ceiling END ceiling --- ,seq.uselimits --- ,seq.price --- ,seq.avgprice --- ,seq.pltq --- ,ROUND(CASE WHEN seq.uselimits THEN --- CASE --- WHEN glec = '1NU' THEN --- --if more than 8/24 pallets, use floor --- CASE WHEN grp.qty >= 24*seq.pltq THEN seq.floor --- -- if more than a pallet use the target price --- ELSE CASE WHEN qtyord >= 8*seq.pltq THEN (seq.ceiling + seq.floor) / 2 --- -- if more than a pallet use the target price --- ELSE CASE WHEN qtyord >= 2*seq.pltq THEN seq.ceiling --- -- if more than a pallet use the target price --- ELSE seq.ceiling * 1.05 --- END END END --- ELSE --- CASE WHEN pricegroup ~ '(Hanger|Dish)' THEN --- --at least 1 pallets is lower limit --- CASE WHEN qtyord >= 01*seq.pltq THEN seq.floor --- --at least 2 pallets is mid range --- ELSE CASE WHEN qtyord >= 0.5*seq.pltq THEN (seq.ceiling + seq.floor) / 2 --- --less than a pallet is upper + 15% --- ELSE seq.ceiling --- END END --- ELSE --- --at least 8 pallets is lower limit --- CASE WHEN qtyord >= 08*seq.pltq THEN seq.floor --- --at least 2 pallets is mid range --- ELSE CASE WHEN qtyord >= 2*seq.pltq THEN (seq.ceiling + seq.floor) / 2 --- --at least 1 pallet is upper range --- ELSE CASE WHEN qtyord >= 1*seq.pltq THEN seq.ceiling --- --less than a pallet is upper + 15% --- ELSE seq.ceiling * 1.15 --- END END END --- END --- END --- ELSE --- null --- END,5) guid +-- account +-- ,shipgrp +-- ,chan +-- ,dsm +-- ,director +-- ,lu +-- --,partgroup +-- --,pricegroup +-- ,part +-- -- ,glec +-- ,oseas +-- ,omon +-- -- ,odate +-- ,sseas +-- ,smon +-- -- ,sdate +-- ,lbs +-- ,qty +-- ,sales_usd +-- ,hist_price +-- ,cost_curstd_usd +-- ,shiplbs +-- ,floor +-- ,ceiling +-- ,uselimits +-- ,price +-- ,avgprice +-- ,pltq +-- ,guid +-- ,least(hist_price, price, avgprice) lowest_last +-- ,least(hist_price, price, avgprice, floor) lowest_floor -- FROM --- ngrp grp --- LEFT OUTER JOIN nseq seq ON --- seq.ship_dba = grp.shipgrp --- AND seq.bill_dba = grp.account --- AND seq.part = grp.part --- AND seq.rn = 1 --- LEFT OUTER JOIN rlarp.repc r ON --- r.rcode = grp.dsm +-- nguid -- ) --- select * from nguid --- --- -- ,orphans AS ( --- -- SELECT --- -- account --- -- ,shipgrp --- -- ,chan --- -- ,dsm --- -- ,director --- -- ,lu --- -- --,partgroup --- -- --,pricegroup --- -- ,part --- -- -- ,glec --- -- ,oseas --- -- ,omon --- -- -- ,odate --- -- ,sseas --- -- ,smon --- -- -- ,sdate --- -- ,lbs --- -- ,qty --- -- ,sales_usd --- -- ,hist_price --- -- ,cost_curstd_usd --- -- ,shiplbs --- -- ,floor --- -- ,ceiling --- -- ,uselimits --- -- ,price --- -- ,avgprice --- -- ,pltq --- -- ,guid --- -- ,least(hist_price, price, avgprice) lowest_last --- -- ,least(hist_price, price, avgprice, floor) lowest_floor --- -- FROM --- -- nguid --- -- ) --- -- SELECT * FROM orphans +-- SELECT * FROM orphans diff --git a/offline/orphan_pool.pg.sql b/offline/orphan_pool.pg.sql index 189c7c9..18757e0 100644 --- a/offline/orphan_pool.pg.sql +++ b/offline/orphan_pool.pg.sql @@ -272,6 +272,83 @@ FROM WHERE cust_lbs >= 1000 ) +----grouped prices------------- +,npgrp AS ( + SELECT + o.bill_dba + ,o.ship_dba + ,o.bill_cust + ,o.ship_cust + ,o.promo + ,o.terms + ,o.dsm + ,o.part + ,o.odate + ,o.qtyord + ,i.nwht * CASE WHEN i.nwun = 'KG' THEN 2.2 ELSE 1 END lbs + ,i.mpck pltq + ,ROUND(o.sales_usd / o.qty,5) price + ,(o.pricing->>'guidance_price')::NUMERIC guidance + ,(o.pricing->>'floor' )::numeric(15,5) floor + ,(o.pricing->>'ceiling')::numeric(15,5) ceiling + ,(o.pricing->>'uselimits')::boolean uselimits + FROM + rlarp.osm_stack o + INNER JOIN "CMS.CUSLG".itemm i ON + i.item = o.part + INNER JOIN checkc c ON + c.shipgrp = o.customer + AND c.oseas = o.oseas + WHERE + VERSION = 'Actual' + AND o.oseas >= 2018 + AND calc_status <> 'CANCELED' + AND o.fs_line = '41010' + AND o.part <> '' + AND substring(o.glec,1,1) <= '2' + AND o.qty <> 0 + AND o.sseas IS NOT NULL + -- AND customer in (select distinct renamed FROM newc ) + GROUP BY + o.bill_dba + ,o.ship_dba + ,o.dsm + ,i.partgroup + ,i.pricegroup + ,o.part + ,o.odate + ,o.qtyord + ,o.pounds + ,o.pallets + ,ROUND(o.sales_usd / o.qty,5) + ,i.nwht * CASE WHEN i.nwun = 'KG' THEN 2.2 ELSE 1 END + ,i.mpck + ,(o.pricing->>'guidance_price')::NUMERIC + ,(o.pricing->>'floor' )::numeric(15,5) + ,(o.pricing->>'ceiling')::numeric(15,5) + ,(o.pricing->>'uselimits')::boolean +) +----sequenced for most recent price------------ +,nseq AS ( + SELECT + bill_dba + ,ship_dba + ,part + ,odate + ,qtyord + ,lbs + ,pltq + ,price + ,guidance + ,floor + ,ceiling + ,uselimits + ,row_number() OVER (PARTITION BY bill_dba, ship_dba, part ORDER BY odate desc) rn + ,round(avg(price) over (PARTITION BY bill_dba, ship_dba, part),5) avgprice + FROM + npgrp +) +-- SELECT * FROM seq WHERE rn = 1 INSERT INTO rlarp.osm_pool SELECT * FROM scale; -- select * from scale) WITH DATA;