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

Righe di miscelazione della funzione MySQL Max

Hai bisogno di un GROUP BY clausola con l'aggregato MAX() . MySQL ti consente di ometterlo (dove altri RDBMS segnalerebbero errori) ma con risultati indeterminati, che stai vedendo. Questo può essere gestito unendosi a una sottoquery che restituisce il gruppo rev per 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

Quanto sopra restituirà il massimo rev valore per qualsiasi id . Se sei certo hai solo bisogno di una riga filtrata da WHERE clausola anziché MAX() per gruppo, guarda l'altra risposta che utilizza ORDER BY &LIMIT .