Saltar al contenido principal
eLearner.app
Módulo 13 · Lección 4 de 452/57 en el curso~12 min
Lecciones del módulo (4/4)

Desplazamientos: LAG y LEAD

Turnos: LAG y LEAD

En los datos secuenciales y basados ​​en el tiempo, a menudo es necesario comparar la fila actual con la del día anterior. En SQL "estándar", hacerlo requiere autouniones muy peligrosas (y muy lentas).

Las funciones LAG() (fila anterior) y LEAD() (fila siguiente) resuelven exactamente este problema con extrema agilidad y elegancia.

Mirando al pasado y al futuro

SQL
SELECT
  created_at,
  total_amount,
  LAG(total_amount) OVER(ORDER BY created_at) AS importo_ordine_precedente
FROM orders;

En el ejemplo, cada fila llevará convenientemente la cantidad producida por la misma tabla, desplazada una fila hacia adelante (hacia atrás en el tiempo). ¡Podemos restar fácilmente total_amount - LAG(...) para calcular la diferencia o los cambios porcentuales de mes a mes!

Del mismo modo, LEAD() extraerá el valor de la fila justo debajo de la actual.

Ejercicio#sql.m13.l4.e1
Intentos: 0Cargando...

De la tabla 'productos', extraiga 'id', 'launched_on', 'price' y agregue 'prev_price', es decir, el 'precio' del producto lógicamente considerado como 'anterior', en orden ascendente de 'launched_on'.

Cargando editor...
Mostrar pista

Utilice LAG(precio) OVER(ORDER BY launch_on ASC)

Solución disponible después de 3 intentos

Ejercicio#sql.m13.l4.e2
Intentos: 0Cargando...

¿Cómo calcularía los saltos de calificación por usuario individual? Simúlelo: de la tabla 'reviews' extraiga 'customer_id', 'created_at', 'rating' y 'next_rating' (la próxima revisión del mismo cliente a lo largo del tiempo). Entonces, divida por 'customer_id', ordene por 'created_at' y use la función de ventana derecha para mirar hacia adelante.

Cargando editor...
Mostrar pista

LEAD() junto con PARTITION BY y ORDER BY en OVER.

Solución disponible después de 3 intentos