# name: test/sql/window/test_lead_lag.test # description: Test Lead/Lag function # group: [window] query II select c1, lead(c1, 2) over (order by c0 rows between 2 preceding and 4 preceding) as b from (values (1, 2), (2, 3), (3, 4), (4, 5) ) a(c0, c1); ---- 2 4 3 5 4 NULL 5 NULL # Lag > 2 with explicit constant default statement ok create table win(id int, v int, t int, f float, s varchar); statement ok insert into win values (1, 1, 2, 0.54, 'h'), (1, 1, 1, 0.21, 'e'), (1, 2, 3, 0.001, 'l'), (2, 10, 4, 0.04, 'l'), (2, 11, -1, 10.45, 'o'), (3, -1, 0, 13.32, ','), (3, 5, -2, 9.87, 'wor'), (3, null, 10, 6.56, 'ld'); query IIII select id, v, t, lag(v, 2, NULL) over (partition by id order by t asc) from win order by id, t ---- 1 1 1 NULL 1 1 2 NULL 1 2 3 1 2 11 -1 NULL 2 10 4 NULL 3 5 -2 NULL 3 -1 0 NULL 3 NULL 10 5 # Shifted lead optimisation with hash collisions statement ok CREATE TABLE issue14398 (date DATE, "group" INT, count INT, status STRING); statement ok INSERT INTO issue14398 VALUES ('2024-01-01', 1, 1000, 'ordered'), ('2024-02-01', 1, 1000, 'dispatched'), ('2024-03-01', 1, 1000, 'dispatched'), ('2024-01-01', 2, 2000, 'ordered'), ('2024-02-01', 2, 2000, 'ordered'), ('2024-03-01', 2, 2000, 'ordered'), ('2024-01-01', 3, 3000, 'ordered'), ('2024-02-01', 3, 3000, 'ordered'), ('2024-03-01', 3, 3000, 'late'), ('2024-01-01', 4, 4000, 'ordered'), ('2024-02-01', 4, 4000, 'ordered'), ('2024-03-01', 4, 4000, 'ordered'), ('2024-01-01', 5, 5000, 'ordered'), ('2024-02-01', 5, 5000, 'late'), ('2024-03-01', 5, 5000, 'ordered'), ('2024-01-01', 6, 1000, 'dispatched'), ('2024-02-01', 6, 1000, 'dispatched'), ('2024-03-01', 6, 1000, 'dispatched'), ('2024-01-01', 7, 1000, 'late'), ('2024-02-01', 7, 1000, 'dispatched'), ('2024-03-01', 7, 1000, 'dispatched'); query IIIIII SELECT "t0"."date", "t0"."group", "t0"."count", "t0"."status", LEAD("t0"."date", 2) OVER (PARTITION BY "t0"."group" ORDER BY "t0"."date" ASC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS "end_date", LEAD("t0"."status", 2) OVER (PARTITION BY "t0"."group" ORDER BY "t0"."date" ASC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS "end_status" FROM "issue14398" AS "t0" ORDER BY 2, 1 ---- 2024-01-01 1 1000 ordered 2024-03-01 dispatched 2024-02-01 1 1000 dispatched NULL NULL 2024-03-01 1 1000 dispatched NULL NULL 2024-01-01 2 2000 ordered 2024-03-01 ordered 2024-02-01 2 2000 ordered NULL NULL 2024-03-01 2 2000 ordered NULL NULL 2024-01-01 3 3000 ordered 2024-03-01 late 2024-02-01 3 3000 ordered NULL NULL 2024-03-01 3 3000 late NULL NULL 2024-01-01 4 4000 ordered 2024-03-01 ordered 2024-02-01 4 4000 ordered NULL NULL 2024-03-01 4 4000 ordered NULL NULL 2024-01-01 5 5000 ordered 2024-03-01 ordered 2024-02-01 5 5000 late NULL NULL 2024-03-01 5 5000 ordered NULL NULL 2024-01-01 6 1000 dispatched 2024-03-01 dispatched 2024-02-01 6 1000 dispatched NULL NULL 2024-03-01 6 1000 dispatched NULL NULL 2024-01-01 7 1000 late 2024-03-01 dispatched 2024-02-01 7 1000 dispatched NULL NULL 2024-03-01 7 1000 dispatched NULL NULL # test lag and lead when offset is null statement ok CREATE TABLE issue17266(c1 INT, c2 SMALLINT, c3 BITSTRING); statement ok INSERT INTO issue17266 VALUES (0, null, null), (1, 32767, '101'), (2, -32767, '101'), (3, 0, '000'), (4, null, null); query IIII SELECT c1, c3, c2, LAG(c3, c2, BITSTRING'010101010') OVER (PARTITION BY c1 ORDER BY c3) FROM issue17266 ORDER BY c1; ---- 0 NULL NULL NULL 1 101 32767 010101010 2 101 -32767 010101010 3 000 0 000 4 NULL NULL NULL query IIII SELECT c1, c3, c2, LEAD(c3, c2, BITSTRING'010101010') OVER (PARTITION BY c1 ORDER BY c3) FROM issue17266 ORDER BY c1; ---- 0 NULL NULL NULL 1 101 32767 010101010 2 101 -32767 010101010 3 000 0 000 4 NULL NULL NULL