commit: 2025-07-28 15:46:52

This commit is contained in:
Paul Trowbridge 2025-07-28 15:46:52 -04:00
parent 404f8a4b1e
commit f28d26dfb0
7 changed files with 263 additions and 2 deletions

2
.gitignore vendored
View File

@ -5,8 +5,6 @@
.idea/workspace.xml .idea/workspace.xml
.project .project
.dbeaver-data-sources.xml .dbeaver-data-sources.xml
Scripts/Script.sql
Scripts/
Diagrams/ Diagrams/
.vs/ .vs/
*.swp *.swp

40
Scripts/Script-1.sql Normal file
View File

@ -0,0 +1,40 @@
SELECT
o.qline,
o.part,
o.touched,
o.qcustomer,
lp.customer,
lp.mold,
p.[key] AS part, -- this is the part number
j.qty,
j.price,
j.odate,
j.ordnum,
j.quoten
FROM
rlarp.live_quotes o
LEFT OUTER JOIN pricing.lastprice lp ON
lp.customer = o.qcustomer
AND lp.mold = substring(o.part,1,8)
OUTER APPLY OPENJSON(lp.part_stats) AS p -- unpacks part keys
OUTER APPLY OPENJSON(p.value)
WITH (
qty FLOAT,
price FLOAT,
odate DATE,
ordnum INT,
quoten INT
) AS j
WHERE
qid = 112859
AND o.part = p.[key] COLLATE SQL_Latin1_General_CP1_CI_AS
SELECT
o.qline,
o.part,
o.touched
FROM
rlarp.live_quotes o
WHERE
o.qid = 112794

24
Scripts/Script-2.sql Normal file
View File

@ -0,0 +1,24 @@
SELECT * FROM pricing.lastprice WHERE customer = 'ALTMAN PLANTS' AND mold = 'XPR15CS1'
SELECT
lp.*
,p.*
,j.*
FROM
pricing.lastprice lp
OUTER APPLY OPENJSON(lp.part_stats) AS p -- unpacks part keys
OUTER APPLY OPENJSON(p.value)
WITH (
qty FLOAT,
price FLOAT,
odate DATE,
ordnum INT,
quoten INT
) AS j
WHERE
customer = 'ALTMAN PLANTS'
AND mold = 'XPR15CS1'
SELECT * FROM pricing.price_queue pq

0
Scripts/Script.sql Normal file
View File

View File

@ -0,0 +1,59 @@
--------------------------------------------------------------------------------
-- Step 1: Rebuild last price history at sales matrix refresh time
--------------------------------------------------------------------------------
DELETE FROM pricing.lastprice;
WITH srt AS (
SELECT
customer,
mold,
part,
version,
qty,
ROUND(sales_usd / qty, 5) AS price,
odate,
oseas,
ordnum,
quoten,
ROW_NUMBER() OVER (
PARTITION BY customer, mold, part, version
ORDER BY odate DESC
) AS rn
FROM rlarp.osm_stack
WHERE
--quotes can't be integrated until we have datasegment or correct part code
version IN ('Actual'/*,'Quotes'*/) AND
customer IS NOT NULL AND
fs_line = '41010' AND
calc_status <> 'CANCELLED' AND
qty <> 0 AND
mold <> ''
),
json_rows AS (
SELECT
customer,
mold,
part,
version,
CONCAT(
'"', part, '":',
(
SELECT version, qty, price, odate, ordnum, quoten
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
)
) AS part_json
FROM srt
WHERE rn = 1
)
,onerow AS (
SELECT
customer,
mold,
CONCAT('{', STRING_AGG(part_json, ','), '}') AS part_stats
FROM json_rows
GROUP BY customer, mold
)
INSERT INTO pricing.lastprice SELECT * FROM onerow;
--CREATE UNIQUE INDEX lastprice_cust_mold ON pricing.lastprice(customer, mold);

View File

@ -0,0 +1,50 @@
CREATE TABLE pricequote.lastprice AS (
WITH
--------SORT--------
srt AS (
SELECT
customer
,partgroup
,dataseg
,qtyord
,ROUND(sales_usd/qty,5) price
,odate
,oseas
,ordnum
,quoten
,row_number() OVER (PARTITION BY customer, partgroup, dataseg, version ORDER BY odate DESC) seq
,version
FROM
rlarp.osm_stack
WHERE
version IN ('Actual','Quotes')
AND customer IS NOT NULL
AND fs_line = '41010'
AND calc_status <> 'CANCELLED'
-- AND customer = 'ALTMAN PLANTS'
AND qty <> 0
AND partgroup <> ''
AND version = 'Actual'
-- LIMIT 10000
)
,onerow AS (
SELECT
customer,
partgroup,
-- Latest per-dataseg sales wrapped as JSONB object
jsonb_object_agg(
dataseg,
to_jsonb(srt)
ORDER BY odate DESC
) AS dataseg_stats
FROM
srt
WHERE
seq = 1
-- AND customer = 'ALTMAN PLANTS'
-- AND partgroup ~ 'XPR15CS'
GROUP BY customer, partgroup
-- ORDER BY customer, partgroup
)
SELECT * FROM onerow --WHERE customer = 'ALTMAN PLANTS' AND partgroup = 'XPR15CS1'
) WITH DATA;

View File

@ -0,0 +1,90 @@
-- SELECT count(*) FROM rlarp.osm_stack o INNER JOIN #lastprice l ON
-- l.customer = o.customer AND o.mold = l.mold
SELECT
o.ordnum,
o.part,
o.odate,
lp.customer,
lp.mold,
p.[key] AS part, -- this is the part number
j.qty,
j.price,
j.odate,
j.ordnum,
j.quoten
FROM
rlarp.osm_stack o
LEFT OUTER JOIN pricing.lastprice lp ON
lp.customer = o.customer
AND lp.mold = o.mold
CROSS APPLY OPENJSON(lp.part_stats) AS p -- unpacks part keys
CROSS APPLY OPENJSON(p.value)
WITH (
qty FLOAT,
price FLOAT,
odate DATE,
ordnum INT,
quoten INT
) AS j
WHERE
o.customer = 'ALTMAN PLANTS'
AND o.mold = 'XPR15CS1'
AND o.ordnum = 935360
WITH exploded AS (
SELECT
lp.customer,
lp.mold,
p.[key] AS part_key,
j.qty,
j.price,
j.odate,
j.ordnum,
j.quoten,
CASE WHEN p.[key] = o.part COLLATE Latin1_General_BIN2 THEN 1 ELSE 0 END AS is_exact_match,
ROW_NUMBER() OVER (PARTITION BY lp.customer, lp.mold ORDER BY j.odate DESC) AS rn_most_recent
FROM rlarp.osm_stack o
LEFT JOIN pricing.lastprice lp ON lp.customer = o.customer AND lp.mold = o.mold
CROSS APPLY OPENJSON(lp.part_stats) AS p
CROSS APPLY OPENJSON(p.value)
WITH (
qty FLOAT,
price FLOAT,
odate DATE,
ordnum INT,
quoten INT
) AS j
WHERE
o.customer = 'ALTMAN PLANTS'
AND o.mold = 'XPR15CS1'
AND o.ordnum = 935360
),
tagged AS (
SELECT
part_key,
qty,
price,
odate,
ordnum,
quoten,
IIF(is_exact_match = 1, 1, NULL) AS is_exact_match,
IIF(rn_most_recent = 1, 1, NULL) AS is_most_recent
FROM exploded
)
--SELECT * FROM taggeg
SELECT (
SELECT
part_key AS [key],
qty,
price,
odate,
ordnum,
quoten,
is_exact_match,
is_most_recent
FROM tagged
FOR JSON PATH, INCLUDE_NULL_VALUES
) AS updated_json_array;