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

Wybierz 1 górny wiersz z każdej grupy

Jeśli używasz SQL-Server (minimum 2005), możesz użyć CTE za pomocą ROW_NUMBER funkcjonować. Możesz użyć CAST dla wersji, aby uzyskać prawidłową kolejność:

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

Demo

ROW_NUMBER zwraca zawsze jeden rekord, nawet jeśli istnieje wielu użytkowników z tą samą (górną) wersją. Jeśli chcesz zwrócić wszystkie „najlepsze rekordy-wersji użytkownika”, musisz zastąpić ROW_NUMBER z DENSE_RANK .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2012 wysyła zapytania dotyczące danych programu Access 2007 przy użyciu błędu OPENROWSET

  2. Jak przyznać dostęp do procedur pocztowych bazy danych SQL Server dla logowania w innej bazie danych?

  3. Polecenie DELETE jest zbyt wolne w tabeli z indeksem klastrowym

  4. Jak zignorować błąd zduplikowanego klucza w T-SQL (SQL Server)

  5. SQL Server dbo.sysdiagrams to tabela użytkownika lub tabela systemowa