Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Innerhalb der Gruppe bestellen nach?

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
        )

Danke an @Quassnoi . Siehe seine Antwort in einer ähnlichen (aber komplizierteren) Frage:mysql-group-by-um-neuestes-ergebnis-anzuzeigen

Wenn Sie die programs aktualisieren Tabelle und legen Sie close_date fest für alle Datensätze, die bis close_date='9999-12-31' Null sind , dann Ihr ORDER BY wird einfacher (und die ganze Abfrage schneller mit richtigen Indizes):

        ORDER BY
                pi.close_date DESC