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

Ottenere valori errati per altre colonne quando seleziono MAX(updated_date)

Hai bisogno di una clausola GROUP BY o di una query più complessa.

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

Per i dati di esempio, verranno restituite 3 righe.

Più probabilmente, vuoi:

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;

Per i dati di esempio, questo restituirà 1 riga:

ta3   2012-03-11 11:05:56

Dei principali DBMS, solo MySQL ti consente di omettere la clausola GROUP BY quando hai una combinazione di aggregati e colonne non aggregate nell'elenco di selezione. Lo standard SQL richiede la clausola GROUP BY ed è necessario elencare tutte le colonne non aggregate al suo interno. A volte, in MySQL, l'omissione della clausola GROUP BY produce la risposta che desideri; ogni tanto, però, riesce a dare una risposta inaspettata.