205 lines
4.3 KiB
SQL
205 lines
4.3 KiB
SQL
# 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
|
|
----
|