Hoy, en mi trabajo, me encontré con la necesidad de buscar el valor de la próxima fila de una tabla y pensé que muchos de ustedes, probablemente, se han encontrado con esta situación. Así que decidí escribir un artículo sobre como obtener el valor de la próxima fila o de la fila anterior de una tabla. SQL Server 2012 provee las funciones LEAD y LAG que hacen exactamente lo que deseo pero lamentablemente no cuento con la versión 2012 de SQL Server. Lo que me obliga a buscar otra alternativa para resolver mi problema.
Así que si necesito saber el valor de la próxima fila, o de la anterior, voy a necesitar añadir una columna a la tabla para identificar el número de línea. También, voy a necesitar una copia de la tabla que estamos trabajando. Con estas 2 cosas puedo relacionar mi tabla con su copia utilizando la columna de número de línea, que añadí anteriormente, para buscar que valor tiene la próxima fila o la anterior. Muy bien, veamos un ejemplo.
Supongamos que tenemos la tabla de la imagen de abajo y queremos saber si el próximo nombre en la lista es Pedro.
Primero tenemos que añadirle a la tabla es una columna que represente el número de línea. Para esto usamos la función de SQL RANK.
SELECT RANK() OVER (ORDER BY NOMBRE) FILA, NOMBRE FROM #EJEMPLO
El query de arriba produce el siguiente resultado.
Ya que tenemos el número de línea solo nos queda relacionar la tabla con una copia de ella misma por el número de línea que acabamos de añadir.
SELECT A.NOMBRE A_NOMBRE, B.NOMBRE B_NOMBRE FROM ( SELECT RANK() OVER (ORDER BY NOMBRE) FILA, NOMBRE FROM #EJEMPLO ) A LEFT OUTER JOIN ( SELECT RANK() OVER (ORDER BY NOMBRE) FILA, NOMBRE FROM #EJEMPLO ) B ON A.FILA = B.FILA - 1 -- usa - 1 para buscar el próximo valor y + 1 para buscar el valor anterior
Para obtener el valor de la línea anterior solo cambia B.FILA – 1 por B.FILA + 1 en el query anterior. El resultado de este query es el siguiente.
Ahora podemos hacer filtros y establecer condiciones basadas en el valor de la próxima fila o en el de la fila anterior.
Roberto Torres Rodríguez
Related posts
2 Comments
Deja una respuesta Cancelar la respuesta
Publicaciones Populares
Categorías
- ASP.Net (6)
- C# (10)
- CSS (5)
- DIY (1)
- General (5)
- JavaScript (8)
- JQuery (6)
- Kodi (antes XBMC) (4)
- Nuevo (3)
- Raspberry Pi (2)
- SQL Server (15)
- Uncategorized (1)
- Vue.js (2)
- Wordpress (1)
interesante truco
ya desde sql 2012 se agregaron comandos que simplifican eso, como LAD, LEAD. simplifican enormemente estos trucos que teniamos que usar antes.