मुझे विंडोिंग फ़ंक्शंस के साथ कुछ मदद चाहिए। मुझे पता है कि आप एक खिड़की के भीतर राशि और एक खिड़की के भीतर चल रहे कुल की गणना कर सकते हैं। लेकिन क्या यह संभव है कि पिछले चल रहे कुल की गणना की जाए?
मुझे लगता है कि आपको ROW
या RANGE
तर्क का उपयोग करने की आवश्यकता होगी । मुझे पता है कि एक CURRENT ROW
विकल्प है, लेकिन मुझे इसकी आवश्यकता होगी CURRENT ROW - 1
, जो अमान्य सिंटैक्स है। मेरे ROW
और RANGE
तर्कों का ज्ञान सीमित है इसलिए किसी भी मदद को कृतज्ञतापूर्वक प्राप्त किया जाएगा।
मैं जानता हूँ कि इस समस्या के लिए कई समाधान देखते हैं कि, लेकिन मैं समझने के लिए देख रहा हूँ ROW
, RANGE
तर्कों और मैं इस समस्या इन के साथ फटा जा सकती है, मान लेते हैं। मैंने पिछले चल रहे कुल की गणना करने के लिए एक संभव तरीका शामिल किया है लेकिन मुझे आश्चर्य है कि क्या कोई बेहतर तरीका है:
USE AdventureWorks2012
SELECT s.SalesOrderID
, s.SalesOrderDetailID
, s.OrderQty
, SUM(s.OrderQty) OVER (PARTITION BY SalesOrderID) AS RunningTotal
, SUM(s.OrderQty) OVER (PARTITION BY SalesOrderID
ORDER BY SalesOrderDetailID) - s.OrderQty AS PreviousRunningTotal
-- Sudo code - I know this does not work
--, SUM(s.OrderQty) OVER (PARTITION BY SalesOrderID
-- ORDER BY SalesOrderDetailID
-- ROWS BETWEEN UNBOUNDED PRECEDING
-- AND CURRENT ROW - 1)
-- AS SudoCodePreviousRunningTotal
FROM Sales.SalesOrderDetail s
WHERE SalesOrderID IN (43670, 43669, 43667, 43663)
ORDER BY s.SalesOrderID
, s.SalesOrderDetailID
, s.OrderQty