sql >> Database >  >> RDS >> Sqlserver

Eerste/laatste rij van de n-de opeenvolgende groep ophalen

U moet de vensterfunctie ROWNUMBER gebruiken in een subquery,...

zoiets als dit brengt je daar:

ROW_NUMBER() OVER(PARTITION BY Price ORDER BY Claim_Submitted_Date DESC) AS Row 

Hier is de update op basis van je viool:

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

Als idData incrementeel (en dus chronologisch) is, zou je dit kunnen gebruiken:

SELECT * FROM
(
SELECT  *,
        ROW_NUMBER() OVER(PARTITION BY Material ORDER BY idData DESC) AS rn  
FROM tabdata t2 
WHERE Material = @material
) res

Als we naar uw laatste vereisten kijken, kunnen we er allemaal over nadenken (als ik u goed begrijp):

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

Hier is een viool op basis hiervan.



  1. % gebruiken voor host bij het maken van een MySQL-gebruiker

  2. Geospatiale punttoewijzing in Vloeiend NHibernate

  3. PHP-functie aanroepen met HTML-knop

  4. kan geen verbinding maken met MySQL db op externe machine