sql >> Databáze >  >> RDS >> Sqlserver

Získejte první/poslední řádek n-té po sobě jdoucí skupiny

V poddotazu budete muset použít funkci ROWNUMBER v okně,...

něco takového vás tam dostane:

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

Zde je aktualizace podle vašich houslí:

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

Pokud je idData přírůstkové (a tedy chronologické), můžete použít toto:

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

Podíváme-li se na vaše nejnovější požadavky, mohli bychom o tom všichni přemýšlet (pokud vám dobře rozumím):

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

Zde je housle na základě toho.



  1. Neznámý sloupec 'Extent1.Discriminator' v 'klauzuli where'

  2. získávání dat ze dvou tabulek v mysql, spojení by zde nefungovalo

  3. Zobrazit řetězec z raise_application_error v programu Java

  4. PL/SQL:Rozdíl mezi dvěma daty