एसक्यूएल सर्वर 2012+ के लिए:
आप LAG
का उपयोग कर सकते हैं
समारोह।
पिछले प्राप्त मूल्य को खोजने के लिए यहां एक उदाहरण दिया गया है, तो निश्चित रूप से अन्य बहुत अच्छे होंगे।
SELECT TOP 5
ReceivedYTD,
InvoicedYTD,
OrderedYTD,
YearReported,
WeekReported,
-- Relevant part
LAG(ReceivedYTD)
OVER (ORDER BY YearReported DESC, WeekReported DESC) AS PreviousReceivedYTD
-- End relevant part
FROM Products
WHERE ProductId = @ProductId
ORDER BY YearReported DESC,
WeekReported DESC
अन्यथा
आपके द्वारा वापस टिप्पणी करने से पहले ही मैं इस उत्तर में अच्छी तरह से शामिल था, इसलिए मैं बस इसके साथ गया।
आपको एक सीटीई का उपयोग करना होगा, और आप जिस पंक्ति संख्या ऑफ़सेट की तलाश कर रहे हैं, उससे उसके सामने जुड़ना होगा।
WITH CTE AS (
SELECT TOP 5
RowNumber = ROW_NUMBER() OVER (ORDER BY YearReported DESC, WeekReported DESC)
ReceivedYTD,
InvoicedYTD,
OrderedYTD,
YearReported,
WeekReported,
FROM Products
WHERE ProductId = @ProductId
ORDER BY YearReported DESC,
WeekReported DESC
)
SELECT CTE.ReceivedYTD,
CTE.InvoicedYTD,
CTE.OrderedYTD,
CTE.YearReported,
CTE.WeekReported,
PreviousRow.ReceivedYTD AS PreviousReceivedYTD
FROM CTE
LEFT OUTER JOIN CTE PreviousRow ON CTE.RowNumber - 1 = PreviousRow.RowNumber