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
fuentes y explicación de con hacer cosas relacionadas a la programación en C sharp, SQL, HTML, JS, etc...
miércoles, 21 de noviembre de 2012
SELECT los último registros por grupo
SQL Server,
Suponiendo que tenemos varios movimientos registrados por folio, en el entendido que un folio puede tener varios movimientos, por ejemplo en una biblioteca Un Libro se presta muchas veces en el dia.
El requerimiento es obtener el último movimiento registrado por cada Libro, bueno de eso trata este tema.
SELECT
*
FROM tblMovimientos
INNER JOIN
(
SELECT
id = MAX(idMov)
FROM tblMovimientos IDS
GROUP BY idLibro
) IDS
ON IDS.id = tblMovimientos .idMov
ORDER BY idLibro
Primeramente hacemos un SELECT anidado con el alias IDS donde en efecto traeremos id Mas actual agrupado por libro con la función MAX porque el id de los movimientos es único e incremental
Después en el SELECT principal hacemos un cruce con todos los ids encontrados con el INNER JOIN para que traiga únicamente los datos que coincidan con dicho cruce y los demás los descarte y como un plus se ordenan por id de libro.
En este ejemplo utilicé SELECT * FROM (*Asterisco) solo con fines didácticos porque en la practica recomiendo encarecidamente que NO lo utilicen, mejor especifiquen los campos que desean mostrar en el SELECT, salvo por ejemplo en un SELECT COUNT(*) FROM si es que lo requieren.
Saludos.
UPDATE SELECT Un registro en la misma tabla
SQL Server:
En algunas ocasiones necesitamos actualizar un registro con los datos de otro registro de la misma tabla, ya sea para duplicar resultados, pruebas o cualquier otro asunto y posiblemente necesites la misma información con id diferentes.
Bueno aquí vamos:
-- En el siguiente ejercicio se actualiza el id 1405 con los datos del registro numero 99
UPDATE tblMovimientos
SET
Fecha=M.Fecha
,Diametro=M.Diametro
,Altura=M.Altura
,CalidadA=M.CalidadA
,CalidadB=M.CalidadB
,CalidadC=M.CalidadC
FROM tblMovimientos M
JOIN tblMovimientos
ON tblMovimientos.idMov = 1405
WHERE M.idMov = 99
En el Query se especifica el Update a la tabla real y se hace referencia a la misma con un alias (M) en el FROM y en el JOIN se hace un cruce de datos especificando en el ON el id que se va a Modificar
y por último en el WHERE se indica el id de donde se obtienen los datos que se identificarán con el alias M.
Saludos.
En algunas ocasiones necesitamos actualizar un registro con los datos de otro registro de la misma tabla, ya sea para duplicar resultados, pruebas o cualquier otro asunto y posiblemente necesites la misma información con id diferentes.
Bueno aquí vamos:
-- En el siguiente ejercicio se actualiza el id 1405 con los datos del registro numero 99
UPDATE tblMovimientos
SET
Fecha=M.Fecha
,Diametro=M.Diametro
,Altura=M.Altura
,CalidadA=M.CalidadA
,CalidadB=M.CalidadB
,CalidadC=M.CalidadC
FROM tblMovimientos M
JOIN tblMovimientos
ON tblMovimientos.idMov = 1405
WHERE M.idMov = 99
En el Query se especifica el Update a la tabla real y se hace referencia a la misma con un alias (M) en el FROM y en el JOIN se hace un cruce de datos especificando en el ON el id que se va a Modificar
y por último en el WHERE se indica el id de donde se obtienen los datos que se identificarán con el alias M.
Saludos.
Suscribirse a:
Entradas (Atom)