sql >> Base de Datos >  >> RDS >> Mysql

Función MySQL Max mezclando filas

Necesitas un GROUP BY cláusula con el agregado MAX() . MySQL le permite omitirlo (donde otros RDBMS informarían errores) pero con resultados indeterminados, que está viendo. Esto se puede manejar uniéndose a una subconsulta que devuelve el rev agrupado por 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

Lo anterior devolverá el máximo rev valor para cualquier id . Si está seguro solo necesita una fila filtrada por WHERE cláusula en lugar de MAX() por grupo, mira la otra respuesta que hace uso de ORDER BY &LIMIT .