should be it

This commit is contained in:
2025-10-24 19:21:19 -05:00
parent a4b23fc57c
commit f09560c7b1
14047 changed files with 3161551 additions and 1 deletions

View File

@@ -0,0 +1,204 @@
# name: test/sql/window/test_nthvalue.test
# description: Most basic window function
# group: [window]
statement ok
SET default_null_order='nulls_first';
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE empsalary (depname varchar, empno bigint, salary int, enroll_date date);
statement ok
INSERT INTO empsalary VALUES ('develop', 10, 5200, '2007-08-01'), ('sales', 1, 5000, '2006-10-01'), ('personnel', 5, 3500, '2007-12-10'), ('sales', 4, 4800, '2007-08-08'), ('personnel', 2, 3900, '2006-12-23'), ('develop', 7, 4200, '2008-01-01'), ('develop', 9, 4500, '2008-01-01'), ('sales', 3, 4800, '2007-08-01'), ('develop', 8, 6000, '2006-10-01'), ('develop', 11, 5200, '2007-08-15');
# nth_value
query III
SELECT depname, empno,
nth_value(empno, 2) OVER (
PARTITION BY depname ORDER BY empno ASC
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
) fv
FROM empsalary
ORDER BY 1, 2
----
develop 7 8
develop 8 9
develop 9 10
develop 10 11
develop 11 NULL
personnel 2 5
personnel 5 NULL
sales 1 3
sales 3 4
sales 4 NULL
# Where either of the the parameters is a constant NULL
query III
SELECT depname, empno,
nth_value(empno, NULL) OVER (
PARTITION BY depname ORDER BY empno ASC
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
) fv
FROM empsalary
ORDER BY 1, 2
----
develop 7 NULL
develop 8 NULL
develop 9 NULL
develop 10 NULL
develop 11 NULL
personnel 2 NULL
personnel 5 NULL
sales 1 NULL
sales 3 NULL
sales 4 NULL
query III
SELECT depname, empno,
nth_value(NULL, 2) OVER (
PARTITION BY depname ORDER BY empno ASC
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
) fv
FROM empsalary
ORDER BY 1, 2
----
develop 7 NULL
develop 8 NULL
develop 9 NULL
develop 10 NULL
develop 11 NULL
personnel 2 NULL
personnel 5 NULL
sales 1 NULL
sales 3 NULL
sales 4 NULL
# Where either of the parameters is a column that contains NULL values
query III
SELECT depname, empno,
nth_value(empno, case empno % 3 when 1 then 2 else NULL end) OVER (
PARTITION BY depname ORDER BY empno ASC
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
) fv
FROM empsalary
ORDER BY 1, 2
----
develop 7 8
develop 8 NULL
develop 9 NULL
develop 10 11
develop 11 NULL
personnel 2 NULL
personnel 5 NULL
sales 1 3
sales 3 NULL
sales 4 NULL
statement ok
CREATE VIEW empno_nulls AS
SELECT depname, case empno % 2 when 1 then empno else NULL end as empno, salary, enroll_date
FROM empsalary
query III
SELECT depname, empno,
nth_value(empno, 2) OVER (
PARTITION BY depname ORDER BY empno ASC
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
) fv
FROM empno_nulls
ORDER BY 1, 2, 3
----
develop NULL NULL
develop NULL 7
develop 7 9
develop 9 11
develop 11 NULL
personnel NULL 5
personnel 5 NULL
sales NULL 1
sales 1 3
sales 3 NULL
# Where the second parameter (offset) is not a constant
query IIII
SELECT depname, empno, 1 + empno %3 as offset,
nth_value(empno, 1 + empno %3) OVER (
PARTITION BY depname ORDER BY empno ASC
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
) fv
FROM empsalary
ORDER BY 1, 2
----
develop 7 2 8
develop 8 3 10
develop 9 1 9
develop 10 2 11
develop 11 3 NULL
personnel 2 3 NULL
personnel 5 3 NULL
sales 1 2 3
sales 3 1 3
sales 4 2 NULL
# Where the second parameter (offset) can be zero (coverage)
query IIII
SELECT depname, empno, empno %3 as offset,
nth_value(empno, empno %3) OVER (
PARTITION BY depname ORDER BY empno ASC
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
) fv
FROM empsalary
ORDER BY 1, 2
----
develop 7 1 7
develop 8 2 9
develop 9 0 NULL
develop 10 1 10
develop 11 2 NULL
personnel 2 2 5
personnel 5 2 NULL
sales 1 1 1
sales 3 0 NULL
sales 4 1 4
# Where the first parameter is a constant
query III
SELECT depname, empno,
nth_value(-1, 2) OVER (
PARTITION BY depname ORDER BY empno ASC
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
) fv
FROM empsalary
ORDER BY 1, 2
----
develop 7 -1
develop 8 -1
develop 9 -1
develop 10 -1
develop 11 NULL
personnel 2 -1
personnel 5 NULL
sales 1 -1
sales 3 -1
sales 4 NULL
statement error
SELECT depname, empno,
nth_value(empno) OVER (
PARTITION BY depname ORDER BY empno ASC
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
) fv
FROM empsalary
----
statement error
SELECT depname, empno,
nth_value(empno, 2, 3) OVER (
PARTITION BY depname ORDER BY empno ASC
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
) fv
FROM empsalary
----