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

Falsche Werte für andere Spalten erhalten, wenn ich MAX(updated_date) auswähle

Sie benötigen entweder eine GROUP BY-Klausel oder eine komplexere Abfrage.

SELECT field1, MAX(updated_date)
  FROM mytable
 GROUP BY field1

Für die Beispieldaten werden 3 Zeilen zurückgegeben.

Wahrscheinlicher ist, dass Sie Folgendes möchten:

SELECT t1.field1, t3.max_date
  FROM mytable AS t1
  JOIN (SELECT MAX(t2.updated_date) AS max_date
          FROM mytable AS t2
       ) AS t3
    ON t1.updated_date = t3.max_date;

Für die Beispieldaten gibt dies 1 Zeile zurück:

ta3   2012-03-11 11:05:56

Von den großen DBMS erlaubt Ihnen nur MySQL, die GROUP BY-Klausel wegzulassen, wenn Sie eine Mischung aus aggregierten und nicht aggregierten Spalten in der Auswahlliste haben. Der SQL-Standard erfordert die GROUP BY-Klausel, und Sie müssen alle nicht aggregierten Spalten darin auflisten. Manchmal führt das Weglassen der GROUP BY-Klausel in MySQL zur gewünschten Antwort; oft gelingt es ihm jedoch, eine unerwartete Antwort zu geben.