-- { echo } -- Another test for window functions because the other one is too long. set allow_experimental_window_functions = 1; -- some craziness with a mix of materialized and unmaterialized const columns -- after merging sorted transform, that used to break the peer group detection in -- the window transform. CREATE TABLE order_by_const ( `a` UInt64, `b` UInt64, `c` UInt64, `d` UInt64 ) ENGINE = MergeTree ORDER BY (a, b) SETTINGS index_granularity = 8192; truncate table order_by_const; system stop merges order_by_const; INSERT INTO order_by_const(a, b, c, d) VALUES (1, 1, 101, 1), (1, 2, 102, 1), (1, 3, 103, 1), (1, 4, 104, 1); INSERT INTO order_by_const(a, b, c, d) VALUES (1, 5, 104, 1), (1, 6, 105, 1), (2, 1, 106, 2), (2, 1, 107, 2); INSERT INTO order_by_const(a, b, c, d) VALUES (2, 2, 107, 2), (2, 3, 108, 2), (2, 4, 109, 2); SELECT row_number() OVER (order by 1, a) FROM order_by_const; 1 2 3 4 5 6 7 8 9 10 11 drop table order_by_const; -- expressions in window frame select count() over (rows between 1 + 1 preceding and 1 + 1 following) from numbers(10); 3 4 5 5 5 5 5 5 4 3 -- signed and unsigned in offset do not cause logical error select count() over (rows between 2 following and 1 + -1 following) FROM numbers(10); -- { serverError 36 } -- default arguments of lagInFrame can be a subtype of the argument select number, lagInFrame(toNullable(number), 2, null) over w, lagInFrame(number, 2, 1) over w from numbers(10) window w as (order by number) ; 0 \N 1 1 \N 1 2 0 0 3 1 1 4 2 2 5 3 3 6 4 4 7 5 5 8 6 6 9 7 7 -- the case when current_row goes past the partition end at the block end select number, row_number() over (partition by number rows between unbounded preceding and 1 preceding) from numbers(4) settings max_block_size = 2; 0 1 1 1 2 1 3 1