diff --git a/offline/flag_count.sql b/offline/flag_count.sql new file mode 100644 index 0000000..998577b --- /dev/null +++ b/offline/flag_count.sql @@ -0,0 +1,2 @@ + select shipgrp, CASE WHEN count(distinct flag) > 1 THEN 'Floor' ELSE string_agg(DISTINCT flag,', ') END from rlarp.cust_flag group by shipgrp + -- select shipgrp, dsm, flag from rlarp.cust_flag diff --git a/offline/price_down.pg.sql b/offline/price_down_2.pg.sql similarity index 100% rename from offline/price_down.pg.sql rename to offline/price_down_2.pg.sql diff --git a/offline/price_down_3.pg.sql b/offline/price_down_3.pg.sql new file mode 100644 index 0000000..12918bf --- /dev/null +++ b/offline/price_down_3.pg.sql @@ -0,0 +1,381 @@ +WITH +----grouped prices------------- +custflag AS ( + select shipgrp, CASE WHEN count(distinct flag) > 1 THEN 'YoY' ELSE string_agg(DISTINCT flag,', ') END flag from rlarp.cust_flag group by shipgrp +) +,pgrp AS ( + SELECT + o.bill_dba + ,o.ship_dba + ,o.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 custflag c ON + c.shipgrp = o.ship_dba + -- 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 + ,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 +) +-- 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 custflag 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 = 'COSTA' and part = 'XNS0T1G3X19C150PYKXR' +-- ,logload AS ( +-- INSERT INTO rlarp.osm_log (doc) SELECT jsonb_build_object('user',current_user,'tag','Pricing 2','type','Pricing 2','stamp',current_timestamp,'source','top level','message','Pricing 2') RETURNING * +-- ) +,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 * sum(o.units) - sum(value_usd))/o.r_rate value_loc + ,c.price_choice * sum(o.units) - sum(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 2' 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 + GROUP BY + 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 + ,c.price_choice + ,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 + -- ,logload.id + -- ,logload.doc->>'tag' + -- ,logload.doc->>'message' + -- ,logload.doc->>'type' +) +SELECT * FROM delta_row +-- SELECT * FROM choose where shipto_group = 'GRIFFIN' and part = 'HSI12001B661050' +-- SELECT SUM(value_usd), count(*) from delta_row +-- -- SELECT * FROM delta_row WHERE shipto_group = 'MONROVIA' +-- -- INSERT INTO rlarp.osm_pool SELECT * FROM delta_row +-- -- 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