Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

लगातार एन-वें समूह की पहली/अंतिम पंक्ति प्राप्त करें

आपको विंडो वाले फ़ंक्शन 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 इस पर आधारित।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर प्रबंधन स्टूडियो (SSMS) के साथ डेटाबेस डिज़ाइन सीखें - भाग 2

  2. एसक्यूएल रैंक () शामिल टेबल पर विभाजन से अधिक

  3. एक पंक्ति में एकाधिक SQL पंक्तियों का चयन करें

  4. रेल और एमएसएसक्यूएल 2008 - क्या हम बाधाओं को मारेंगे?

  5. SQL सर्वर में UTC मिलीसेकंड को DATETIME में कनवर्ट करें