miércoles, 21 de noviembre de 2012

SELECT maximos y minimos en un mismo registro

En mi caso tengo una tabla con 9 registros con un campo id unico e incremental
y requiero obtener la clasificación inferior y superior en un mismo registro, que se ingresaron de manera incrementalmente.

tablaOriginal

id     clasificación
1 12
2 16
3 20
4 25
5 30
6 35
7 40
8 45
9 100


tabla necesaria

1 0.00 12.00
2 12.00 16.00
3 16.00 20.00
4 20.00 25.00
5 25.00 30.00
6 30.00 35.00
7 35.00 40.00
8 40.00 45.00
9 45.00 100.00



SELECT 
TS.id,
TI  = ISNULL(TI.Clasificacion,0)
,TS = TS.Clasificacion

FROM tblTabla TS 
LEFT JOIN  tblTabla TI 
ON TI.id= TS.id-1

Se hace un SELECT de la tabla en el FROM con el alias TS (Superior)
y se hace un LEFT JOIN con la misma tabla pero con el alias TI (Inferior)
se utiliza un LEFT para que aunque no se encuentre coincidencia como seria en el caso del primer registro  regrese NULL entonces asumimos que no hay menor que ese registro y por tanto le ponemos el cero como valor mínimo con la instrucción ISNULL(TI.Clasificacion,0) esto debido a que en el ON de TI se busca el id de la tabla superior menos 1

Saludos


No hay comentarios:

Publicar un comentario