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.

tabla ejemplo

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.

tabla ejemplo con num linea

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.

ejemplo proximo valor

Ahora podemos hacer filtros y establecer condiciones basadas en el valor de la próxima fila o en el de la fila anterior.