FROM t5
} {1 one 2 two 3 three 4 four 5 five}
+#==========================================================================
+
do_execsql_test 4.0 {
DROP TABLE IF EXISTS ttt;
CREATE TABLE ttt(a INTEGER PRIMARY KEY, b INTEGER, c INTEGER);
) FROM ttt;
} {18 17 15 12 11 9 6 5 3}
+do_execsql_test 4.5.1.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3}
+
+do_test 4.5.1.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 2.00 3.00 3.00 1.50 1.50 2.50 2.50 3.50 3.50 2.00 2.00 3.00 3.00 4.00 4.00}
+
+do_execsql_test 4.5.2.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5}
+
+do_test 4.5.2.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 2.00 3.00 3.00 1.50 2.00 2.50 3.00 3.50 4.00 2.00 3.00 3.00 4.00 4.00 5.00}
+
+do_execsql_test 4.5.3.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 1 3 1 2 1 3 1 4 1 3 1 4 1 5 1}
+
+do_test 4.5.3.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 1.50 3.00 2.00 1.50 2.00 2.50 2.20 3.50 2.50 2.00 2.57 3.00 2.75 4.00 3.00}
+
+do_execsql_test 4.5.4.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5}
+
+do_test 4.5.4.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 2.00 3.00 3.00 1.50 2.00 2.50 3.00 3.50 4.00 2.00 3.00 3.00 4.00 4.00 5.00}
+
+do_execsql_test 4.5.5.1 {
+ SELECT max(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3}
+
+do_test 4.5.5.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 2.00 3.00 3.00 2.00 1.50 3.00 2.50 4.00 3.50 3.00 2.00 4.00 3.00 5.00 4.00}
+
+do_execsql_test 4.5.6.1 {
+ SELECT max(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5}
+
+do_test 4.5.6.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 2.00 3.00 3.00 2.00 2.00 3.00 3.00 4.00 4.00 3.00 3.00 4.00 4.00 5.00 5.00}
+
+do_execsql_test 4.5.7.1 {
+ SELECT max(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 1 3 1 2 1 3 1 4 1 3 1 4 1 5 1}
+
+do_test 4.5.7.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 1.50 3.00 2.00 2.00 2.00 3.00 2.20 4.00 2.50 3.00 2.57 4.00 2.75 5.00 3.00}
+
+do_execsql_test 4.5.8.1 {
+ SELECT max(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5}
+
+do_test 4.5.8.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 2.00 3.00 3.00 2.00 2.00 3.00 3.00 4.00 4.00 3.00 3.00 4.00 4.00 5.00 5.00}
+
+do_execsql_test 4.5.9.1 {
+ SELECT max(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 3 1 3 2 4 3 4 1 4 2 5 3}
+
+do_test 4.5.9.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 1.50 2.00 2.00 3.00 2.00 1.50 2.20 2.50 2.50 3.50 2.57 2.00 2.75 3.00 3.00 4.00}
+
+do_execsql_test 4.5.10.1 {
+ SELECT max(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 3 2 3 3 4 4 4 3 4 4 5 5}
+
+do_test 4.5.10.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 1.50 2.00 2.00 3.00 2.00 2.00 2.20 3.00 2.50 4.00 2.57 3.00 2.75 4.00 3.00 5.00}
+
+do_execsql_test 4.5.11.1 {
+ SELECT max(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 1 3 1 3 1 3 1 4 1 4 1 4 1 5 1}
+
+do_test 4.5.11.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 1.50 1.50 2.00 2.00 2.00 2.00 2.20 2.20 2.50 2.50 2.57 2.57 2.75 2.75 3.00 3.00}
+
+do_execsql_test 4.5.12.1 {
+ SELECT max(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 3 2 3 3 4 4 4 3 4 4 5 5}
+
+do_test 4.5.12.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 1.50 2.00 2.00 3.00 2.00 2.00 2.20 3.00 2.50 4.00 2.57 3.00 2.75 4.00 3.00 5.00}
+
+do_execsql_test 4.5.13.1 {
+ SELECT max(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3}
+
+do_test 4.5.13.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 2.00 3.00 3.00 2.00 1.50 3.00 2.50 4.00 3.50 3.00 2.00 4.00 3.00 5.00 4.00}
+
+do_execsql_test 4.5.14.1 {
+ SELECT max(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5}
+
+do_test 4.5.14.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 2.00 3.00 3.00 2.00 2.00 3.00 3.00 4.00 4.00 3.00 3.00 4.00 4.00 5.00 5.00}
+
+do_execsql_test 4.5.15.1 {
+ SELECT max(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 1 3 1 2 1 3 1 4 1 3 1 4 1 5 1}
+
+do_test 4.5.15.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 1.50 3.00 2.00 2.00 2.00 3.00 2.20 4.00 2.50 3.00 2.57 4.00 2.75 5.00 3.00}
+
+do_execsql_test 4.5.16.1 {
+ SELECT max(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5}
+
+do_test 4.5.16.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 2.00 3.00 3.00 2.00 2.00 3.00 3.00 4.00 4.00 3.00 3.00 4.00 4.00 5.00 5.00}
+
+do_execsql_test 4.5.17.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3}
+
+do_test 4.5.17.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 2.00 3.00 3.00 1.50 1.50 2.50 2.50 3.50 3.50 2.00 2.00 3.00 3.00 4.00 4.00}
+
+do_execsql_test 4.5.18.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3}
+
+do_test 4.5.18.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 2.00 2.00 3.00 3.00 4.00 1.50 2.00 2.50 3.00 3.50 4.00 2.00 2.00 3.00 3.00 4.00 4.00}
+
+do_execsql_test 4.5.19.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5}
+
+do_test 4.5.19.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 2.00 3.00 3.00 1.50 2.00 2.50 3.00 3.50 4.00 2.00 3.00 3.00 4.00 4.00 5.00}
+
+do_execsql_test 4.5.20.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5}
+
+do_test 4.5.20.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 2.00 2.00 3.00 3.00 4.00 1.50 2.50 2.50 3.50 3.50 4.50 2.00 3.00 3.00 4.00 4.00 5.00}
+
+do_execsql_test 4.5.21.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3}
+
+do_test 4.5.21.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {2.00 1.00 3.00 2.00 4.00 3.00 2.00 1.50 3.00 2.50 4.00 3.50 2.00 2.00 3.00 3.00 4.00 4.00}
+
+do_execsql_test 4.5.22.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
+ FROM ttt ORDER BY a
+} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3}
+
+do_test 4.5.22.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {2.00 2.00 3.00 3.00 4.00 4.00 2.00 2.00 3.00 3.00 4.00 4.00 2.00 2.00 3.00 3.00 4.00 4.00}
+
+do_execsql_test 4.5.23.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {3 1 4 2 5 3 3 2 4 3 5 4 3 3 4 4 5 5}
+
+do_test 4.5.23.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {2.00 1.00 3.00 2.00 4.00 3.00 2.00 2.00 3.00 3.00 4.00 4.00 2.00 3.00 3.00 4.00 4.00 5.00}
+
+do_execsql_test 4.5.24.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
+ FROM ttt ORDER BY a
+} {3 1 4 2 5 3 3 2 4 3 5 4 3 3 4 4 5 5}
+
+do_test 4.5.24.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {2.00 2.00 3.00 3.00 4.00 4.00 2.00 2.50 3.00 3.50 4.00 4.50 2.00 3.00 3.00 4.00 4.00 5.00}
+
+do_execsql_test 4.5.25.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3}
+
+do_test 4.5.25.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 2.00 3.00 3.00 2.00 1.50 3.00 2.50 4.00 3.50 3.00 2.00 4.00 3.00 5.00 4.00}
+
+do_execsql_test 4.5.26.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3}
+
+do_test 4.5.26.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 2.00 2.00 3.00 3.00 4.00 2.00 2.00 3.00 3.00 4.00 4.00 3.00 2.00 4.00 3.00 5.00 4.00}
+
+do_execsql_test 4.5.27.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5}
+
+do_test 4.5.27.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 2.00 3.00 3.00 2.00 2.00 3.00 3.00 4.00 4.00 3.00 3.00 4.00 4.00 5.00 5.00}
+
+do_execsql_test 4.5.28.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5}
+
+do_test 4.5.28.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 2.00 2.00 3.00 3.00 4.00 2.00 2.50 3.00 3.50 4.00 4.50 3.00 3.00 4.00 4.00 5.00 5.00}
+
+do_execsql_test 4.5.29.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3}
+
+do_test 4.5.29.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {2.00 1.00 3.00 2.00 4.00 3.00 2.50 1.50 3.50 2.50 4.50 3.50 3.00 2.00 4.00 3.00 5.00 4.00}
+
+do_execsql_test 4.5.30.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
+ FROM ttt ORDER BY a
+} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3}
+
+do_test 4.5.30.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {2.00 2.00 3.00 3.00 4.00 4.00 2.50 2.00 3.50 3.00 4.50 4.00 3.00 2.00 4.00 3.00 5.00 4.00}
+
+do_execsql_test 4.5.31.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {3 1 4 2 5 3 3 2 4 3 5 4 3 3 4 4 5 5}
+
+do_test 4.5.31.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {2.00 1.00 3.00 2.00 4.00 3.00 2.50 2.00 3.50 3.00 4.50 4.00 3.00 3.00 4.00 4.00 5.00 5.00}
+
+do_execsql_test 4.5.32.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
+ FROM ttt ORDER BY a
+} {3 1 4 2 5 3 3 2 4 3 5 4 3 3 4 4 5 5}
+
+do_test 4.5.32.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {2.00 2.00 3.00 3.00 4.00 4.00 2.50 2.50 3.50 3.50 4.50 4.50 3.00 3.00 4.00 4.00 5.00 5.00}
+
+do_execsql_test 4.5.33.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3}
+
+do_test 4.5.33.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 2.00 3.00 3.00 1.50 1.50 2.50 2.50 3.50 3.50 2.00 2.00 3.00 3.00 4.00 4.00}
+
+do_execsql_test 4.5.34.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5}
+
+do_test 4.5.34.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 2.00 2.00 3.00 3.00 4.00 1.50 2.50 2.50 3.50 3.50 4.50 2.00 3.00 3.00 4.00 4.00 5.00}
+
+do_execsql_test 4.5.35.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3}
+
+do_test 4.5.35.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 2.00 2.00 3.00 3.00 4.00 1.50 2.00 2.50 3.00 3.50 4.00 2.00 2.00 3.00 3.00 4.00 4.00}
+
+do_execsql_test 4.5.36.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3}
+
+do_test 4.5.36.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 2.00 3.00 3.00 1.50 1.50 2.50 2.50 3.50 3.50 2.00 2.00 3.00 3.00 4.00 4.00}
+
+do_execsql_test 4.5.37.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3}
+
+do_test 4.5.37.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {2.00 1.00 3.00 2.00 4.00 3.00 2.50 1.50 3.50 2.50 4.50 3.50 3.00 2.00 4.00 3.00 5.00 4.00}
+
+do_execsql_test 4.5.38.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {3 1 4 2 5 3 3 2 4 3 5 4 3 3 4 4 5 5}
+
+do_test 4.5.38.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {2.00 2.00 3.00 3.00 4.00 4.00 2.50 2.50 3.50 3.50 4.50 4.50 3.00 3.00 4.00 4.00 5.00 5.00}
+
+do_execsql_test 4.5.39.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3}
+
+do_test 4.5.39.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {2.00 2.00 3.00 3.00 4.00 4.00 2.50 2.00 3.50 3.00 4.50 4.00 3.00 2.00 4.00 3.00 5.00 4.00}
+
+do_execsql_test 4.5.40.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3}
+
+do_test 4.5.40.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {2.00 1.00 3.00 2.00 4.00 3.00 2.50 1.50 3.50 2.50 4.50 3.50 3.00 2.00 4.00 3.00 5.00 4.00}
+
+do_execsql_test 4.5.41.1 {
+ SELECT max(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3}
+
+do_test 4.5.41.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {2.00 1.00 3.00 2.00 4.00 3.00 2.00 1.50 3.00 2.50 4.00 3.50 2.00 2.00 3.00 3.00 4.00 4.00}
+
+do_execsql_test 4.5.42.1 {
+ SELECT max(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {3 1 4 2 5 3 3 2 4 3 5 4 3 3 4 4 5 5}
+
+do_test 4.5.42.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {2.00 2.00 3.00 3.00 4.00 4.00 2.00 2.50 3.00 3.50 4.00 4.50 2.00 3.00 3.00 4.00 4.00 5.00}
+
+do_execsql_test 4.5.43.1 {
+ SELECT max(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3}
+
+do_test 4.5.43.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {2.00 2.00 3.00 3.00 4.00 4.00 2.00 2.00 3.00 3.00 4.00 4.00 2.00 2.00 3.00 3.00 4.00 4.00}
+
+do_execsql_test 4.5.44.1 {
+ SELECT max(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3}
+
+do_test 4.5.44.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {2.00 1.00 3.00 2.00 4.00 3.00 2.00 1.50 3.00 2.50 4.00 3.50 2.00 2.00 3.00 3.00 4.00 4.00}
+
+do_execsql_test 4.5.45.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3}
+
+do_test 4.5.45.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 2.00 3.00 3.00 1.50 1.50 2.50 2.50 3.50 3.50 2.00 2.00 3.00 3.00 4.00 4.00}
+
+do_execsql_test 4.5.46.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5}
+
+do_test 4.5.46.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 2.00 2.00 3.00 3.00 4.00 1.50 2.50 2.50 3.50 3.50 4.50 2.00 3.00 3.00 4.00 4.00 5.00}
+
+do_execsql_test 4.5.47.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3}
+
+do_test 4.5.47.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 2.00 2.00 3.00 3.00 4.00 1.50 2.00 2.50 3.00 3.50 4.00 2.00 2.00 3.00 3.00 4.00 4.00}
+
+do_execsql_test 4.5.48.1 {
+ SELECT max(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ min(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a
+} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3}
+
+do_test 4.5.48.2 {
+ set myres {}
+ foreach r [db eval {SELECT avg(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ avg(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+ FROM ttt ORDER BY a}] {
+ lappend myres [format %.2f [set r]]
+ }
+ set myres
+} {1.00 1.00 2.00 2.00 3.00 3.00 1.50 1.50 2.50 2.50 3.50 3.50 2.00 2.00 3.00 3.00 4.00 4.00}
+
finish_test