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

Vyberte 1 horní řádek z každé skupiny

Pokud používáte SQL-Server (minimálně 2005), můžete použít CTE s ROW_NUMBER funkce. Můžete použít CAST pro verzi, abyste získali správné pořadí:

WITH cte 
     AS (SELECT id, 
                userid, 
                version, 
                datetime, 
                Row_number() 
                  OVER ( 
                    partition BY userid 
                    ORDER BY Cast(version AS INT) DESC) rn 
         FROM   [dbo].[table]) 
SELECT id, 
       userid, 
       version, 
       datetime 
FROM   cte 
WHERE  rn = 1 
ORDER BY userid

Ukázka

ROW_NUMBER vrací vždy jeden záznam, i když je více uživatelů se stejnou (nejvyšší) verzí. Pokud chcete vrátit všechny "top-version-user-records", musíte nahradit ROW_NUMBER s DENSE_RANK .



  1. PHP detekuje pokus o vložení SQL

  2. Row Goals, část 4:Anti Join Anti Pattern

  3. Výkon MySQL VIEW pro tabulky v kombinaci s UNION ALL

  4. Chyby, úskalí a doporučené postupy T-SQL – pivotování a unpivoting