Saltar al contenido

LAG y LEAD

SQL · Unidad 13: Funciones de ventana

¿Está comprando Luis cada vez menos? Sus pedidos fueron de 5, de 2 y de 1 unidades. Para verlo en una consulta hace falta tener, junto a cada pedido, el de antes.

LAG trae un valor de la fila anterior. Entre sus paréntesis va la columna que quieres traer, y el ORDER BY de la ventana dice qué quiere decir «anterior». Con fecha, id, es el pedido que entró justo antes.

El primer pedido no tiene ninguno delante, y LAG deja ahí un NULL.

SELECT id, cantidad,
  LAG(cantidad) OVER (
    ORDER BY fecha, id
  ) AS anterior
FROM pedidos
WHERE cliente_id = 2
ORDER BY fecha, id;

Devuelve

idcantidadanterior
35NULL
625
1212

El resto de la explicación está en la lección, que es del plan completo.

Ejercicios de esta lección

Se hacen en la app, que los corrige al momento y explica por qué.

  1. 1. Predice la salida

    Ana, la clienta 1, ha hecho los pedidos 1, 2 y 7, en ese orden, de 2, 1 y 1 unidades. ¿Qué devuelve esta consulta?

  2. 2. Completa el código

    El almacén quiere saber si cada pedido que entra es más grande o más pequeño que el que entró justo antes. Completa la resta para los cinco primeros pedidos, con el más reciente arriba.

  3. 3. Ordena las líneas

    LEAD no es solo para fechas. A quien mira un producto de menos de 100, la tienda quiere sugerirle el que le sigue en precio. Ordena la consulta que da cada uno de esos productos con su precio y el nombre del siguiente más caro, en orden alfabético. Sobran dos líneas.

  4. 4. Completa el código

    ¿Cuándo fue la compra anterior de cada cliente? Completa la ventana para Valeria y Diego, los clientes 5 y 6. La anterior es la de la misma persona.

  5. 5. Predice la salida

    Los pedidos 2, 3 y 4 son de tres clientes distintos, Ana, Luis y Mateo, de 1, 5 y 10 unidades. Ana ya había hecho antes el pedido 1, de 2 unidades. ¿Qué devuelve esta consulta?

  6. 6. Encuentra el bug

    Ahora los pedidos que crecieron, más grandes que el anterior del mismo cliente. Solo hay uno, el pedido 8 de Valeria, que pasó de 1 unidad a 3. La consulta devuelve siete. ¿Qué línea tiene el problema?

  7. 7. Predice la salida

    El resumen por día de la lección pasada, hasta el 10 de enero. Hubo pedidos el 3, el 4, el 9 y el 10, de 2, 6, 10 y 1 unidades. Alguien le añade una columna y la llama mas_que_ayer. ¿Qué devuelve esta consulta?

  8. 8. Ordena las líneas

    El encargado acomoda cada estante por precio. Para los productos de menos de 100, que son los de Accesorios y los de Audio, ordena la consulta que da cada uno con su sección y, al lado, el precio del que tiene justo por debajo en esa misma sección, en orden alfabético. Sobran dos líneas.

  9. 9. Escribe el código

    El cambio de cada pedido respecto al anterior del mismo cliente. Escribe una consulta con cuatro columnas en este orden, el cliente_id, el número del pedido, su cantidad y cuántas unidades más que el pedido anterior de ese cliente, en negativo si fueron menos. El anterior es el de fecha anterior y, dentro del mismo día, el de número más bajo. Ordena por cliente y, dentro de cada uno, del pedido más reciente al más antiguo.

Hacer esta lección

Se abre en el navegador. Esta lección es del plan completo; la primera unidad de cada curso es gratis.

Ver todas las lecciones →