Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zamów w grupie według?

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
        )

Podziękowania należy udać się na adres @Quassnoi . Zobacz jego odpowiedź w podobnym (ale bardziej skomplikowanym) pytaniu:mysql-group-by-to-display-ostatni-wynik

Jeśli zaktualizujesz programs tabeli i ustaw close_date dla wszystkich rekordów, które mają wartość zero, do close_date='9999-12-31' , a następnie ORDER BY będzie prostsze (a całe zapytanie szybciej z odpowiednimi indeksami):

        ORDER BY
                pi.close_date DESC


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. zadanie usunięcia wierszy starszych niż 3 miesiące w bazie mysql

  2. wypisz wszystkie tabele w bazie danych za pomocą MySQLi

  3. Odmowa dostępu dla użytkownika 'nazwa_użytkownika'@'localhost' (przy użyciu hasła:TAK) w C:\webdev\wamp\www\membershipSite\classes\Mysql.php w wierszu 9

  4. Jak mogę wykonać wiele zapytań na jednej stronie?

  5. Optymalizuj while i SQL w foreach