Existen muchos casos en los cuales, necesitamos construir consultas en SQL, que nos retornen el máximo de un grupo de valores. Esta consulta, a priori, parece ser trivial y no tener mayor complejidad, pero la verdad es que no podemos realizarla directamente, es decir, obtener el grupo de valores máximos, mediante una selección simple de estos. Es así que tenemos que comenzar por obtener todos los valores mínimos y seleccionar del conjunto total de valores, aquellos que no se encuentran entre los mínimos, o sea los máximos.
El ejemplo siguiente refleja la estructura de la consulta que obtiene los valores máximos.
Utilizaremos la siguiente tabla
Sucesos |
Id |
Tipo |
Gravedad |
Con los siguientes valores
Id | Tipo | Gravedad |
1 | Tipo A | 8 |
2 | Tipo B | 3 |
3 | Tipo C | 5 |
4 | Tipo A | 10 |
5 | Tipo A | 12 |
6 | Tipo A | 4 |
7 | Tipo B | 13 |
La consulta para obtener los valores máximos es:
SELECT dbo.Suceso.Descripcion, dbo.Suceso.Gravedad
FROM dbo.Suceso
WHERE dbo.Suceso.id NOT IN
(
SELECT dbo.Suceso.id
FROM dbo.Suceso INNER JOIN
dbo.Suceso SucesoAux ON dbo.Suceso.Tipo = SucesoAux.Tipo
AND dbo.Suceso.Gravedad < SucesoAux.Gravedad
)
En la consulta anidada, se obtienen todos los valores mínimos, de cada uno de los Tipos definidos. En la consulta principal se seleccionan solo aquellos id que no estén entre los mínimos, como se ya se dijo, estos son los máximos.
Esto se hace mediante un join con la propia tabla, seleccionando los valores que tienen algún elemento mayor (dbo.Suceso.Gravedad < SucesoAux.Gravedad)
Nota: Si quisiéramos el máximo valor de entre todos los elementos bastaría con quitar la condición dbo.Suceso.Tipo = SucesoAux.Tipo, la cual restringe las comparaciones entre los elementos del mismo Tipo.
El resultado de la consulta sería en el caso por tipos
Tipo A | 12 |
Tipo B | 13 |
Tipo C | 5 |
Autor: Neri Custodio
4 comentarios:
Quizás te interese este informe de la Universidad de Vigo:
http://win-vista.es/360/velneo-es-mas-rapido-que-microsoft-y-oracle/
Muchisimas gracias, me ha sido utilísima la informacion, te lo agradezco mucho
hola, tu blog esta muy interesante y en serio muchas gracias por la info, ya estaba medio loco jejeje intentando obtener esos maximos...
Excelente artículo. Llevaba horas tratando de hacer lo que allí explicas...
El ejemplo, sencillo...
MIL GRACIAS
Publicar un comentario