Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Pobierz pierwszy/ostatni wiersz n-tej kolejnej grupy

Będziesz musiał użyć funkcji okienkowej ROWNUMBER w podzapytaniu,...

coś takiego Cię tam zaprowadzi:

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

Oto aktualizacja na podstawie Twoich skrzypiec:

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

Jeśli idData jest przyrostowy (a zatem chronologiczny), możesz użyć tego:

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

Patrząc na Twoje najnowsze wymagania, wszyscy możemy się nad tym zastanowić (jeśli dobrze rozumiem):

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

Oto skrzypce na tej podstawie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstaw do z wieloma podzapytaniami jako wartościami

  2. Wybierasz przedostatni wiersz z tylko jednym zaznaczeniem w programie SQL Server?

  3. Jak określić niezmienną kulturę podczas korzystania z FORMAT() w SQL Server

  4. Konfigurowanie grup dostępności AlwaysOn — część 2

  5. Cała długość łat. tabeli w zakresie sql w promieniu 15 km do każdej długości łat. innej tabeli kw. 2008