142 lines
4.3 KiB
SQL
142 lines
4.3 KiB
SQL
WITH
|
|
sel AS (select 'v1:P.P.PLT..' _v1ds, 'ALTMAN PLANTS' _cust, 'TFR001G0' _mold, 'D' _chan)
|
|
,sort AS (
|
|
SELECT
|
|
p.agglevel
|
|
,CASE WHEN p.agglevel ? 'cust' THEN 'cust' ELSE 'market' END source
|
|
,COALESCE(gset.v1ds = (SELECT _v1ds FROM sel),false) v1ds_match
|
|
,gset.chan = _chan chan_match
|
|
,gset.*
|
|
,row_number() OVER (PARTITION BY p.agglevel ORDER BY avgunits DESC) rn
|
|
,stats.*
|
|
FROM
|
|
rlarp.price_pool_dev p
|
|
CROSS JOIN sel
|
|
JOIN LATERAL jsonb_to_record(gset) AS gset(
|
|
chan text
|
|
,mold text
|
|
,v1ds text
|
|
,v0ds text
|
|
,cust text
|
|
,vers text
|
|
--,nurs text
|
|
--,ghse text
|
|
) ON TRUE
|
|
JOIN LATERAL jsonb_to_record(stats) AS stats(
|
|
avgunits numeric
|
|
,avgtargetprice numeric
|
|
,avgordcount numeric
|
|
,avgcustcount numeric
|
|
,early_season int
|
|
,early_price numeric
|
|
,recent_season int
|
|
,recent_price numeric
|
|
) ON TRUE
|
|
WHERE
|
|
gset @> jsonb_build_object(
|
|
'mold', (SELECT _mold FROM sel)
|
|
,'vers', 'A'
|
|
)
|
|
AND (
|
|
gset @> jsonb_build_object(
|
|
'cust', (SELECT _cust FROM sel)
|
|
)
|
|
OR NOT gset ? 'cust'
|
|
)
|
|
AND COALESCE(stats.early_season,stats.recent_season) IS NOT NULL
|
|
AND NOT p.agglevel ? 'nurs'
|
|
AND NOT p.agglevel ? 'ghse'
|
|
ORDER BY
|
|
source ASC
|
|
,rn ASC
|
|
)
|
|
--,flag AS (
|
|
--SELECT
|
|
-- --agglevel
|
|
-- CASE source
|
|
-- WHEN 'cust' THEN
|
|
-- CASE WHEN v1ds IS NOT NULL THEN
|
|
-- CASE WHEN v1ds_match THEN 'customer exact' ELSE
|
|
-- CASE WHEN rn = 1 THEN 'customer v1ds vol' ELSE 'customer v1ds other' END
|
|
-- END
|
|
-- ELSE
|
|
-- CASE WHEN rn = 1 THEN 'customer v0ds vol' ELSE 'customer v0ds other' END
|
|
-- END
|
|
-- ELSE
|
|
-- CASE WHEN v1ds IS NOT NULL THEN
|
|
-- CASE WHEN v1ds_match THEN 'market exact' ELSE
|
|
-- CASE WHEN rn = 1 THEN 'market v1ds vol' ELSE 'market v1ds other' END
|
|
-- END
|
|
-- ELSE
|
|
-- CASE WHEN rn = 1 THEN 'market v0ds vol' ELSE 'market v0ds other' END
|
|
-- END
|
|
-- END relevance
|
|
-- ,source
|
|
-- ,v1ds_match
|
|
-- ,chan_match
|
|
-- ,chan
|
|
-- ,mold
|
|
-- ,v1ds
|
|
-- ,v0ds
|
|
-- ,cust
|
|
-- ,vers
|
|
-- ,rn
|
|
-- ,avgunits
|
|
-- ,avgordcount
|
|
-- ,avgcustcount
|
|
-- ,avgtargetprice
|
|
-- ,early_season
|
|
-- ,early_price
|
|
-- ,recent_season
|
|
-- ,recent_price
|
|
--FROM
|
|
-- sort
|
|
--)
|
|
--,rel AS (
|
|
-- SELECT * FROM (values
|
|
-- ('customer exact' ,1)
|
|
-- ,('customer v0ds other',7)
|
|
-- ,('customer v0ds vol' ,3)
|
|
-- ,('customer v1ds other',6)
|
|
-- ,('customer v1ds vol' ,2)
|
|
-- ,('market exact' ,4)
|
|
-- ,('market v0ds other' ,9)
|
|
-- ,('market v0ds vol' ,5)
|
|
-- ,('market v1ds other' ,8)
|
|
-- ) x (flag,prefer)
|
|
--)
|
|
--,rel_sort AS (
|
|
-- SELECT
|
|
-- -- flag.relevance
|
|
-- --,flag.source
|
|
-- --,rel.prefer
|
|
-- --,row_number() OVER (PARTITION BY flag.source ORDER BY rel.prefer ASC) best
|
|
-- jsonb_strip_nulls(
|
|
-- jsonb_build_object(
|
|
-- relevance
|
|
-- ,jsonb_build_object(
|
|
-- 'avgunits' ,avgunits
|
|
-- ,'avgordcount' ,avgordcount
|
|
-- ,'avgcustcount' ,avgcustcount
|
|
-- ,'avgtargetprice' ,avgtargetprice
|
|
-- ,'early_season' ,early_season
|
|
-- ,'early_price' ,early_price
|
|
-- ,'recent_season' ,recent_season
|
|
-- ,'recent_price' ,recent_price
|
|
-- ,'ds' ,COALESCE(v1ds,v0ds)
|
|
-- ,'rank'
|
|
-- ,row_number() OVER (PARTITION BY flag.source ORDER BY rel.prefer ASC)
|
|
-- )
|
|
-- )
|
|
-- ) doc
|
|
-- FROM
|
|
-- flag
|
|
-- LEFT OUTER JOIN rel ON
|
|
-- rel.flag = flag.relevance
|
|
-- WHERE
|
|
-- relevance ~ 'vol|exact'
|
|
--)
|
|
----SELECT jsonb_pretty(jsonb_agg(doc)) FROM rel_sort
|
|
----SELECT jsonb_pretty(jsonb_obj_aggc(doc)) FROM rel_sort
|
|
SELECT * FROM sort
|