sql >> Database teknologi >  >> RDS >> Sqlserver

Få første/sidste række i n'te på hinanden følgende gruppe

Du skal bruge vinduesfunktionen ROWNUMBER i en underforespørgsel,...

noget som dette vil bringe dig derhen:

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

Her er opdateringen baseret på din violin:

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

Hvis idData er inkrementel (og derfor kronologisk), kan du bruge dette:

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 ser på dine seneste krav, kan vi alle tænke over det (hvis jeg forstår dig rigtigt):

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

Her er en violin baseret på dette.



  1. PDO::bindParam i en foreach-løkke, bliver alle værdier sat som de samme?

  2. Hvordan sammenligner man to databaseobjekter i Oracle?

  3. Psycopg2 indsæt python-ordbog i postgres-databasen

  4. Vis flere værdier fra en række, når dropdown-boksen bruges fra mysql-databasen