Ver Mensaje Individual
  #2 (permalink)  
Antiguo 19/10/2010, 11:11
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Función de agregación

Buenos días gfg08:

La función Max pertenece a un grupo especial de funciones llamadas de agrupación (junto con min, count, sum, etc). Estas funciones generalmente deberán ir acompañadas de la cláusula GROUP BY. Me imagino que eses novat@ en estos temas, así es que te recomiendo que le des una revisada a cualquier libro o manual de SQL para que aprendas el uso de estas funciones.

Ahora bien, con respecto a tu problema este es ocasionado justamente por que no tienes la cláusula GROUP BY. trataré de explicar con un ejemplo para ver si queda más claro:

Supongamos que tienes los siguientes datos

Código:
Codigo|Modelo|Tipo|Velocidad
-----------------------------
1|HP|Tipo 1|10
2|HP|Tipo 2|20
3|Epson|Tipo 1|15
4|Epson|Tipo 2|18
5|ACME|Tipo 2|2
6|ACME|Tipo 3|14
si haces esto:

Código SQL:
Ver original
  1. SELECT Modelo, MAX(Velocidad) AS velocidad FROM Impresoras
  2. GROUP BY modelo

el resultado sería este

Código:
Modelo|Velocidad
------------------
2|HP|20
4|Epson|18
6|ACME|14
es decir, la impresora más rápida para cada una de los modelos que tienes. Ahora bien por lo que comentas tú necesitas la más rápida de todas, para esto entonces tienes que hacer una subconsulta que te obtenga primero cual es la velocidad máxima para filtrar los registros de tu tabla. puedes hacerlo así

Código SQL:
Ver original
  1. SELECT modelo, velocidad FROM Impresoras
  2. WHERE Velocidad = (SELECT MAX(velocidad) FROM Impresoras)

o utilizando un INNER JOIN

Código SQL:
Ver original
  1. SELECT modelo, velocidad FROM Impresoras I
  2. INNER JOIN
  3. (
  4. SELECT MAX(velocidad) AS max_velocidad FROM Impresoras
  5. ) T
  6. ON T.max_velocidad = I.Velocidad

Saludos
Leo.