sql >> Databasteknik >  >> RDS >> Mysql

Beställa inom grupp efter?

SELECT  c.*, p.*
FROM    clients AS c
JOIN    programs AS p
ON      p.id = 
        (
        SELECT  pi.id
        FROM    programs AS pi
        WHERE   pi.client_id = c.id
        ORDER BY
                pi.close_date=0 DESC, pi.close_date DESC
        LIMIT 1
        )

Tack ska gå till @Quassnoi . Se hans svar i en liknande (men mer komplicerad) fråga:mysql-group-by-to-display-latest-result

Om du uppdaterar programs tabell och ställ in close_date för alla poster att det är noll till close_date='9999-12-31' , sedan din ORDER BY blir enklare (och hela frågan snabbare med korrekta index):

        ORDER BY
                pi.close_date DESC


  1. Möten på arbetsplatsen:Återta utrymme från en överdimensionerad databas

  2. få tillgång till ett kolumnalias i where-satsen i postgresql

  3. Använda PostgreSQL-replikeringsplatser

  4. Automatisk radering av glömda transaktioner i MS SQL Server