WITH
cte1 AS ( SELECT CodeGoods,
Validate,
Mass,
SUM(Mass) OVER (PARTITION BY CodeGoods ORDER BY Validate) CumMass
FROM Rest ),
cte2 AS ( SELECT cte1.CodeGoods,
cte1.Validate,
cte1.Mass,
COALESCE(LAG(CumMass) OVER (PARTITION BY cte1.CodeGoods ORDER BY cte1.Validate), 0) LagMass
FROM cte1 )
SELECT cte2.CodeGoods,
cte2.Validate,
cte2.Mass
FROM cte2
JOIN Orders ON Orders.CodeGoods = cte2.CodeGoods
AND Orders.Mass >= cte2.LagMass
CodeGoods
Validate
Mass
0001
2021-10-14 00:00:00.000
1000
0001
2021-10-15 00:00:00.000
6000
0002
2021-10-15 00:00:00.000
10000
0003
2021-10-15 00:00:00.000
10000
…
hidden batch(es)
WITH
cte1 AS ( SELECT r1.CodeGoods,
r1.Validate,
r1.Mass,
SUM(r2.Mass) CumMass,
COUNT(*) rownumber
FROM Rest r1
JOIN Rest r2 ON r1.CodeGoods = r2.CodeGoods
AND r1.Validate >= r2.Validate
GROUP BY r1.CodeGoods,
r1.Validate,
r1.Mass),
cte2 AS ( SELECT t1.CodeGoods,
t1.Validate,
t1.Mass,
COALESCE(t2.CumMass, 0) LagMass
FROM cte1 t1
LEFT JOIN cte1 t2 ON t1.CodeGoods = t2.CodeGoods
AND t1.rownumber = t2.rownumber+1 )
SELECT cte2.CodeGoods,
cte2.Validate,
cte2.Mass
FROM cte2
JOIN Orders ON Orders.CodeGoods = cte2.CodeGoods
AND Orders.Mass >= cte2.LagMass