Obtención de valores máximos de una tabla en SQL ~ Bitácora del Desarrollador

viernes, 9 de marzo de 2007

Obtención de valores máximos de una tabla en SQL

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

Posts Relacionados por Secciones



4 comentarios:

Anónimo dijo...

Quizás te interese este informe de la Universidad de Vigo:

http://win-vista.es/360/velneo-es-mas-rapido-que-microsoft-y-oracle/

Edu dijo...

Muchisimas gracias, me ha sido utilísima la informacion, te lo agradezco mucho

Anónimo dijo...

hola, tu blog esta muy interesante y en serio muchas gracias por la info, ya estaba medio loco jejeje intentando obtener esos maximos...

Alexis dijo...

Excelente artículo. Llevaba horas tratando de hacer lo que allí explicas...

El ejemplo, sencillo...

MIL GRACIAS