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

group_concat v SQL Server 2008

V SQL Serveru od verze 2005 a novější můžete použít CTE (Common Table Expression) s ROW_NUMBER funkce k odstranění duplicit:

;WITH LastPerUser AS
(
   SELECT 
       ID, UserID, ClassID, SchoolID, Created,
       ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY Created DESC) AS 'RowNum'
   FROM dbo.YourTable
)
SELECT 
   ID, UserID, ClassID, SchoolID, Created,
FROM LastPerUser
WHERE RowNum = 1

Toto CTE „rozděluje“ vaše data podle UserID a pro každý oddíl ROW_NUMBER funkce rozdává sekvenční čísla začínající na 1 a seřazená podle Created DESC - takže poslední řádek dostane RowNum =1 (pro každé ID uživatele ), což je to, co vyberu z CTE v příkazu SELECT za ním.

Pomocí stejného CTE můžete také snadno odstranit duplikáty:

;WITH LastPerUser AS
(
   SELECT 
       ID, UserID, ClassID, SchoolID, Created,
       ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY Created DESC) AS 'RowNum'
   FROM dbo.YourTable
)
DELETE FROM dbo.YourTable t
FROM LastPerUser cte
WHERE t.ID = cte.ID AND cte.RowNum > 1

Platí stejný princip:„seskupujete“ (neboli oddílujete) svá data podle určitých kritérií, postupně očíslujete všechny řádky pro každý datový oddíl a ty s hodnotami většími než 1 pro „číslo rozděleného řádku“ jsou vyřazeny DELETE .



  1. Vztahy MySQL

  2. Jak vytvořit PL/SQL SYS_REFCURSOR v databázi Oracle

  3. SELECT výsledky s nesprávným pořadím sloupců s PyMySQL

  4. MySql:jak vytvořit poddotaz a spočítat všechny řádky, kde je id stejné, ve dvou tabulkách