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

Función MAX en la cláusula where mysql

No podemos hacer referencia al resultado de una función agregada (por ejemplo, MAX() ) en un WHERE cláusula del mismo SELECT .

El patrón normativo para resolver este tipo de problema es usar una vista en línea, algo como esto:

SELECT t.firstName
     , t.Lastname
     , t.id
  FROM mytable t
  JOIN ( SELECT MAX(mx.id) AS max_id
           FROM mytable mx
       ) m
    ON m.max_id = t.id

Esta es solo una forma de obtener el resultado especificado. Hay varios otros enfoques para obtener el mismo resultado, y algunos de ellos pueden ser mucho menos eficientes que otros. Otras respuestas demuestran este enfoque:

 WHERE t.id = (SELECT MAX(id) FROM ... )

A veces, el enfoque más simple es usar un ORDEN POR con un LÍMITE. (Tenga en cuenta que esta sintaxis es específica de MySQL)

SELECT t.firstName
     , t.Lastname
     , t.id
  FROM mytable t
 ORDER BY t.id DESC
 LIMIT 1

Tenga en cuenta que esto devolverá solo una fila; entonces, si hay más de una fila con el mismo valor de identificación, esto no las devolverá todas. (La primera consulta devolverá TODAS las filas que tienen el mismo valor de id.)

Este enfoque se puede ampliar para obtener más de una fila, puede obtener las cinco filas que tienen los valores de identificación más altos cambiándolo a LIMIT 5 .

Tenga en cuenta que el rendimiento de este enfoque depende particularmente de la disponibilidad de un índice adecuado (es decir, con id como PRIMARY KEY o como la columna inicial en otro índice). Un índice adecuado mejorará el rendimiento de las consultas utilizando todos estos enfoques.