मेरे पास SQL सर्वर नहीं है और SQLFiddle हाल ही में मेरे साथ अच्छा नहीं खेल रहा है, इसलिए यह परीक्षण नहीं किया गया है, लेकिन तर्क काम करना चाहिए...
WITH
stock_changes
AS
(
SELECT Supplier, Destination, Req_Time, Prd_Code, Prd_Description, -Qty AS Qty FROM orders
UNION ALL
SELECT Supplier, NULL, '00:00', Prd_Code, Prd_Desc, Stock FROM stock
),
stock_post_order
AS
(
SELECT
*,
SUM(Qty) OVER (PARTITION BY Supplier, Prd_Code
ORDER BY Req_Time
ROWS UNBOUNDED PRECEDING
)
AS new_qty
FROM
stock_changes
)
SELECT
*,
CASE WHEN new_qty > qty THEN new_qty ELSE qty END AS order_shortfall
FROM
stock_post_order
WHERE
new_qty < 0
पहले अपने ऑर्डर की मात्रा को नकारात्मक होने के लिए उल्टा करें, इसलिए वे वह राशि हैं जिसके द्वारा स्टॉक स्तर बदलने वाले हैं।
इसके बाद, 0 के आवश्यक समय के साथ अपने स्टॉक स्तरों को ऑर्डर के साथ जोड़ दें (इसे एक ऐसे ऑर्डर की तरह बनाने के लिए जो स्टॉक लेने के बजाय स्टॉक वितरित करता है, और आपके अन्य सभी ऑर्डर से पहले आता है) ।
इसके बाद, यह पता लगाएं कि किसी ऑर्डर के बाद उत्पाद की कुल शेष मात्रा कितनी है; उस उत्पाद के लिए सभी पूर्ववर्ती पंक्तियों (समय क्रम में) को जोड़कर। (Stock - Order1 - Order2, etc, etc
)
फिर उन पंक्तियों का चयन करें जहां नया स्टॉक स्तर नकारात्मक हो गया है।