1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-27 20:41:58 +03:00

Add support for window functions row_number(), rank(), dense_rank() and

percent_rank().

FossilOrigin-Name: 91c1cb7a217d0991a08256269f6c55ef185c25362d57b36bfbd2d85dab38e58f
This commit is contained in:
dan
2018-06-02 21:04:28 +00:00
parent f690b57206
commit dfa552f45b
9 changed files with 2069 additions and 274 deletions

View File

@ -73,9 +73,95 @@ foreach {tn window} {
16 "ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING"
17 "ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING"
} {
execsql_test 1.2.1.$tn "SELECT max(b) OVER ( ORDER BY a $window ) FROM t2"
execsql_test 1.2.2.$tn "SELECT min(b) OVER ( ORDER BY a $window ) FROM t2"
execsql_test 1.$tn.2.1 "SELECT max(b) OVER ( ORDER BY a $window ) FROM t2"
execsql_test 1.$tn.2.2 "SELECT min(b) OVER ( ORDER BY a $window ) FROM t2"
execsql_test 1.$tn.3.1 "
SELECT row_number() OVER ( ORDER BY a $window ) FROM t2
"
execsql_test 1.$tn.3.2 "
SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a $window ) FROM t2
"
execsql_test 1.$tn.4.1 "
SELECT dense_rank() OVER ( ORDER BY a $window ) FROM t2
"
execsql_test 1.$tn.4.2 "
SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a $window ) FROM t2
"
execsql_test 1.$tn.4.3 "
SELECT dense_rank() OVER ( ORDER BY b $window ) FROM t2
"
execsql_test 1.$tn.4.4 "
SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b $window ) FROM t2
"
execsql_test 1.$tn.4.5 "
SELECT dense_rank() OVER ( ORDER BY b%10 $window ) FROM t2
"
execsql_test 1.$tn.4.6 "
SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 $window ) FROM t2
"
execsql_test 1.$tn.5.1 "
SELECT rank() OVER ( ORDER BY a $window ) FROM t2
"
execsql_test 1.$tn.5.2 "
SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a $window ) FROM t2
"
execsql_test 1.$tn.5.3 "
SELECT rank() OVER ( ORDER BY b $window ) FROM t2
"
execsql_test 1.$tn.5.4 "
SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b $window ) FROM t2
"
execsql_test 1.$tn.5.5 "
SELECT rank() OVER ( ORDER BY b%10 $window ) FROM t2
"
execsql_test 1.$tn.5.6 "
SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 $window ) FROM t2
"
execsql_test 1.$tn.6.1 "
SELECT
row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 $window ),
rank() OVER ( PARTITION BY b%2 ORDER BY b%10 $window ),
dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 $window )
FROM t2
"
execsql_test 1.$tn.7.1 "
SELECT CAST( round( 100 *
percent_rank() OVER ( ORDER BY a $window )
) AS integer) FROM t2"
#execsql_test 1.$tn.7.2 "
#SELECT CAST( round( 100 *
#percent_rank() OVER ( PARTITION BY b%10 ORDER BY a $window )
#) AS integer) FROM t2"
execsql_test 1.$tn.7.3 "
SELECT CAST( round( 100 *
percent_rank() OVER ( ORDER BY b $window )
) AS integer) FROM t2"
#execsql_test 1.$tn.7.4 "
#SELECT CAST( round( 100 *
#percent_rank() OVER ( PARTITION BY b%10 ORDER BY b $window )
#) AS integer) FROM t2"
execsql_test 1.$tn.7.5 "
SELECT CAST( round( 100 *
percent_rank() OVER ( ORDER BY b%10 $window )
) AS integer) FROM t2"
execsql_test 1.$tn.7.6 "
SELECT CAST( round( 100 *
percent_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 $window )
) AS integer) FROM t2"
}
finish_test