Mysql
 sql >> Base de données >  >> RDS >> Mysql

Obtenir des valeurs erronées pour d'autres colonnes lorsque je sélectionne MAX(updated_date)

Vous avez besoin d'une clause GROUP BY ou d'une requête plus complexe.

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

Pour les exemples de données, cela renverra 3 lignes.

Plus probablement, vous voulez :

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;

Pour les exemples de données, cela renverra 1 ligne :

ta3   2012-03-11 11:05:56

Parmi les principaux SGBD, seul MySQL vous permet d'omettre la clause GROUP BY lorsque vous avez un mélange d'agrégats et de colonnes non agrégées dans la liste de sélection. La norme SQL requiert la clause GROUP BY et vous devez y répertorier toutes les colonnes non agrégées. Parfois, dans MySQL, omettre la clause GROUP BY produit la réponse souhaitée; le plus souvent, cependant, il parvient à donner une réponse inattendue.