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

Fonction MySQL Max mélangeant des lignes

Vous avez besoin d'un GROUP BY clause avec l'agrégat MAX() . MySQL vous permet de l'omettre (là où d'autres RDBMS signaleraient des erreurs) mais avec des résultats indéterminés, ce que vous voyez. Cela peut être géré en se joignant à une sous-requête qui renvoie le rev groupé par id .

SELECT 
  r.id,
  r.state,
  maxrev.rev
FROM
  VIEW_data r
  /* INNER JOIN against subquery which returns MAX(rev) per id only */
  JOIN (
    SELECT id, MAX(rev) AS rev
    FROM VIEW_data GROUP BY id
  /* JOIN is on both id and rev to pull the correct value for state */
  ) maxrev  ON r.id = maxrev.id AND r.rev = maxrev.rev
WHERE r.id = 1

http://sqlfiddle.com/#!2/4f651/8

Ce qui précède renverra le max rev valeur pour tout id . Si vous êtes certain vous n'avez besoin que d'une ligne filtrée par WHERE clause plutôt que MAX() par groupe, regardez l'autre réponse qui utilise ORDER BY &LIMIT .