sql >> Database teknologi >  >> RDS >> Mysql

Vælg rækker med maksimal kolonneværdi gruppe efter en anden kolonne

Jeg har selv kæmpet med dette mange gange, og løsningen er at tænke på din forespørgsel anderledes.

Jeg vil have hver DocGroupViewID-række, hvor Del_Index er den højeste (max) for alle rækker med det DocGroupViewID:

SELECT
    T.DocGroupViewID,
    T.Del_Index,
    T.ID
FROM MyTable T
WHERE T.Del_Index = (
    SELECT MAX( T1.Del_Index ) FROM MyTable T1
    WHERE T1.DocGroupViewID = T.DocGroupViewID 
)
 

Det bliver mere komplekst, når mere end én række kan have den samme Del_Index , siden da har du brug for en måde at vælge, hvilken du vil vise.

EDIT:ønskede at følge op med en anden mulighed

Du kan bruge RANK() eller ROW_NUMBER() fungerer med en CTE for at få mere kontrol over resultaterne, som følger:

-- fake a source table DECLARE @t TABLE ( ID int IDENTITY(1,1) PRIMARY KEY, Del_Index int, DocGroupViewID int ) INSERT INTO @t SELECT 1, 1 UNION ALL SELECT 2, 1 UNION ALL SELECT 3, 1 UNION ALL SELECT 1, 2 UNION ALL SELECT 2, 2 UNION ALL SELECT 2, 2 UNION ALL SELECT 1, 3 UNION ALL SELECT 2, 3 UNION ALL SELECT 3, 3 UNION ALL SELECT 4, 3 -- show our source SELECT * FROM @t -- select using RANK (can have duplicates) ;WITH cteRank AS ( SELECT DocGroupViewID, Del_Index, ID, RANK() OVER (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC) AS RowRank, ROW_NUMBER() OVER (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC) AS RowNumber FROM @t ) SELECT * FROM cteRank WHERE RowRank = 1 -- select using ROW_NUMBER ;WITH cteRowNumber AS ( SELECT DocGroupViewID, Del_Index, ID, RANK() OVER (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC) AS RowRank, ROW_NUMBER() OVER (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC) AS RowNumber FROM @t ) SELECT * FROM cteRowNumber WHERE RowNumber = 1

Hvis du har måder at sortere bånd på, skal du blot tilføje det til ORDER BY .



  1. Fjern flere arrays parallelt

  2. Hvorfor kan jeg ikke bruge alias i en count(*) kolonne og henvise til det i en have-sætning?

  3. PostgreSQL on the Rise:2018 Postgres Funds &2019 Trends

  4. Brug af MySQL med Entity Framework