sql >> Databasteknik >  >> RDS >> Sqlserver

Få första/sista raden i den n:e gruppen i följd

Du kommer att behöva använda fönsterfunktionen ROWNUMBER i en underfråga,...

något sådant här tar dig dit:

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

Här är uppdateringen baserad på din fiol:

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

Om idData är inkrementell (och därför kronologisk) kan du använda detta:

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

När vi tittar på dina senaste krav kan vi alla tänka över det (om jag förstår dig rätt):

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

Här är en fiol baserat på detta.



  1. Skapa en inline SQL-tabell i farten (för en uteslutande vänsterkoppling)

  2. Nära platssökning på Google Maps, PHP och MySQL

  3. Fråga som returnerar en extra post. Några råd om hur man tar bort det från sökresultaten?

  4. Hur bygger man nästa och tidigare länkar med php?