आपको विंडो वाले फ़ंक्शन ROWNUMBER को एक सबक्वेरी में उपयोग करने की आवश्यकता होगी,...
कुछ इस तरह आपको वहां पहुंचाएगा:
ROW_NUMBER() OVER(PARTITION BY Price ORDER BY Claim_Submitted_Date DESC) AS Row
आपकी पहेली पर आधारित अपडेट यहां दिया गया है:
DECLARE @material VARCHAR(20)
SET @material = '1271-4303'
SELECT * FROM
(
SELECT *,
ROW_NUMBER() OVER(PARTITION BY Material ORDER BY Claim_Submitted_Date ASC) AS rn
FROM tabdata t2
WHERE Material = @material
) res
WHERE rn=2
यदि idData वृद्धिशील है (और इसलिए कालानुक्रमिक) तो आप इसका उपयोग कर सकते हैं:
SELECT * FROM
(
SELECT *,
ROW_NUMBER() OVER(PARTITION BY Material ORDER BY idData DESC) AS rn
FROM tabdata t2
WHERE Material = @material
) res
आपकी नवीनतम आवश्यकताओं को देखते हुए, हम सब यह सोचकर खत्म हो सकते हैं (यदि मैं आपको सही ढंग से समझूं):
DECLARE @MATERIAL AS VARCHAR(9)
SET @MATERIAL = '1271-4303'
SELECT TOP 1 *
FROM tabdata t2
WHERE Material = @material
AND PRICE <> ( SELECT TOP 1 Price
FROM tabdata
WHERE Material = @material
ORDER BY CLAIM_SUBMITTED_DATE desc)
ORDER BY CLAIM_SUBMITTED_DATE desc
--results
idData Claim_Submitted_Date Material Price
7 2013-11-08 12:16:00.000 1271-4303 18
यह रहा एक fiddle इस पर आधारित।