From c58ce9ea0da30b02ca928e992c0669c2aab3dbc9 Mon Sep 17 00:00:00 2001 From: Paul Trowbridge Date: Thu, 10 Apr 2025 17:18:09 -0400 Subject: [PATCH] add query to investigate without writing rows --- offline/price_down_inq.pg.sql | 323 ++++++++++++++++++++++++++++++++++ 1 file changed, 323 insertions(+) create mode 100644 offline/price_down_inq.pg.sql diff --git a/offline/price_down_inq.pg.sql b/offline/price_down_inq.pg.sql new file mode 100644 index 0000000..8089176 --- /dev/null +++ b/offline/price_down_inq.pg.sql @@ -0,0 +1,323 @@ +WITH +----grouped prices------------- +pgrp AS ( + SELECT + o.bill_dba + ,o.ship_dba + ,c.dsm + ,i.partgroup + ,i.pricegroup + ,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 + LEFT OUTER JOIN "CMS.CUSLG".itemm i ON + i.item = o.part + INNER JOIN rlarp.cust_flag c ON + c.shipgrp = o.customer + AND c.dsm = o.default_rep + WHERE + VERSION = 'Actual' + AND o.oseas >= 2025 + 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 o.sales_usd <> 0 + -- AND customer in (select distinct renamed FROM newc ) + GROUP BY + o.bill_dba + ,o.ship_dba + ,c.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 +) +-- SELECT * FROM pgrp where ship_dba ~ 'MONROVIA' +-- select * from npgrp limit 100 +--sequenced for most recent price------------ +,seq AS ( + SELECT + bill_dba + ,ship_dba + ,part + ,odate + ,qtyord + ,lbs + ,pltq + ,price last_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 + pgrp +) +-- SELECT * FROM SEQ WHERE ship_dba = 'MONROVIA' +-- SELECT * FROM seq WHERE ship_dba like 'COSTA%' +,partlist AS ( + SELECT + billto_group + ,shipto_group + ,dsm + ,part + ,glec + ,pricegroup + ----order date as a proxy for order size + ,order_date + ,sum(units) qty + ,round(sum(value_usd)/sum(units),5) hist_price + FROM + rlarp.osm_pool o + INNER JOIN "CMS.CUSLG".itemm i ON + i.item = o.part + WHERE + order_season = 2026 + GROUP BY + billto_group + ,shipto_group + ,dsm + ,part + ,glec + ,pricegroup + ,order_date + HAVING + abs(sum(units)) > 10 +) +,combine AS MATERIALIZED ( +-- select * from partlist +-- SELECT * FROM seq WHERE rn = 1 LIMIT 1000 +-- ,guid AS ( + SELECT + p.billto_group + ,p.shipto_group + ,p.dsm + ,p.part + ,p.glec + ,p.pricegroup + ,p.order_date + ,p.qty + ,p.hist_price + ,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.last_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 p.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 + ,least(hist_price, last_price, avgprice) lowest_last + ,least(hist_price, last_price, avgprice, CASE WHEN uselimits THEN + ROUND(CASE WHEN seq.uselimits THEN + CASE + WHEN glec = '1NU' THEN + --if more than 8/24 pallets, use floor + CASE WHEN p.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) ELSE hist_price END) lowest_guid + ,c.flag + FROM + partlist p + INNER JOIN rlarp.cust_flag c ON + c.shipgrp = p.shipto_group + AND substring(c.dsm,1,5) = substring(p.dsm,1,5) + LEFT OUTER JOIN seq seq ON + seq.ship_dba = p.shipto_group + AND seq.bill_dba = p.billto_group + AND seq.part = p.part + AND seq.rn = 1 + LEFT OUTER JOIN rlarp.repc r ON + r.rcode = p.dsm +) +-- SELECT * FROM combine where shipto_group = 'MONROVIA' +,choose AS MATERIALIZED ( + SELECT + billto_group + ,shipto_group + ,dsm + ,part + ,glec + ,pricegroup + ,order_date + ,qty + ,hist_price + ,floor + ,ceiling + ,uselimits + ,last_price + ,avgprice + ,pltq + ,guid + ,lowest_last + ,lowest_guid + ,flag + ,CASE flag + WHEN 'YoY' THEN lowest_last + WHEN 'Floor' THEN lowest_guid + WHEN 'Retail' THEN hist_price + WHEN 'Warehouse' THEN hist_price + WHEN 'Orphan' THEN lowest_guid + ELSE lowest_last + END price_choice + FROM + combine +) +-- SELECT * FROM choose where shipto_group = 'MONROVIA' and part = 'NBB005G1BE2B014PYIQX' +-- ,delta_row AS ( +-- SELECT +-- o.fspr +-- ,o.plnt +-- ,o.promo +-- ,o.terms +-- ,o.bill_cust_descr +-- ,o.ship_cust_descr +-- ,o.dsm +-- ,o.quota_rep_descr +-- ,o.director +-- ,o.billto_group +-- ,o.shipto_group +-- ,o.chan +-- ,o.chansub +-- ,o.chan_retail +-- ,o.part +-- ,o.part_descr +-- ,o.part_group +-- ,o.branding +-- ,o.majg_descr +-- ,o.ming_descr +-- ,o.majs_descr +-- ,o.mins_descr +-- ,o.segm +-- ,o.substance +-- ,o.fs_line +-- ,o.r_currency +-- ,o.r_rate +-- ,o.c_currency +-- ,o.c_rate +-- ,0::numeric units +-- ,(c.price_choice * o.units - value_usd)/o.r_rate value_loc +-- ,c.price_choice * o.units - value_usd value_usd +-- ,0::numeric cost_loc +-- ,0::numeric cost_usd +-- ,o.calc_status +-- ,o.flag +-- ,o.order_date +-- ,o.order_month +-- ,o.order_season +-- ,o.request_date +-- ,o.request_month +-- ,o.request_season +-- ,o.ship_date +-- ,o.ship_month +-- ,o.ship_season +-- ,o.version +-- ,'Pricing' iter +-- ,logload.id logid +-- ,logload.doc->>'tag' tag +-- ,logload.doc->>'message' "comment" +-- ,logload.doc->>'type' module +-- ,0::NUMERIC pounds +-- FROM +-- rlarp.osm_pool o +-- CROSS JOIN logload +-- INNER JOIN choose c ON +-- c.billto_group = o.billto_group +-- AND c.shipto_group = o.shipto_group +-- AND substring(c.dsm,1,5) = substring(o.dsm,1,5) +-- AND c.part = o.part +-- AND c.order_date = o.order_date +-- WHERE +-- o.order_season = 2026 +-- ) +-- SELECT billto_group, shipto_group, substring(dsm,1,5), part, order_date, count(*) over (PARTITION BY billto_group, shipto_group, substring(dsm,1,5), part, order_date) cnt +-- FROM +-- choose +-- GROUP BY +-- billto_group, shipto_group, substring(dsm,1,5), part, order_date +-- select shipto_group, sum(value_usd) from delta_row group by shipto_group