summaryrefslogtreecommitdiffstats
path: root/mysql-test/main/win_min_max.test
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 18:00:34 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 18:00:34 +0000
commit3f619478f796eddbba6e39502fe941b285dd97b1 (patch)
treee2c7b5777f728320e5b5542b6213fd3591ba51e2 /mysql-test/main/win_min_max.test
parentInitial commit. (diff)
downloadmariadb-3f619478f796eddbba6e39502fe941b285dd97b1.tar.xz
mariadb-3f619478f796eddbba6e39502fe941b285dd97b1.zip
Adding upstream version 1:10.11.6.upstream/1%10.11.6upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'mysql-test/main/win_min_max.test')
-rw-r--r--mysql-test/main/win_min_max.test370
1 files changed, 370 insertions, 0 deletions
diff --git a/mysql-test/main/win_min_max.test b/mysql-test/main/win_min_max.test
new file mode 100644
index 00000000..8efde87f
--- /dev/null
+++ b/mysql-test/main/win_min_max.test
@@ -0,0 +1,370 @@
+create table t1 (
+ pk int primary key,
+ a int,
+ b int,
+ c real
+);
+
+
+insert into t1 values
+(101 , 0, 10, 1.1),
+(102 , 0, 10, 2.1),
+(103 , 1, 10, 3.1),
+(104 , 1, 10, 4.1),
+(108 , 2, 10, 5.1),
+(105 , 2, 20, 6.1),
+(106 , 2, 20, 7.1),
+(107 , 2, 20, 8.15),
+(109 , 4, 20, 9.15),
+(110 , 4, 20, 10.15),
+(111 , 5, NULL, 11.15),
+(112 , 5, 1, 12.25),
+(113 , 5, NULL, 13.35),
+(114 , 5, NULL, 14.50),
+(115 , 5, NULL, 15.65),
+(116 , 6, 1, NULL),
+(117 , 6, 1, 10),
+(118 , 6, 1, 1.1),
+(119 , 6, 1, NULL),
+(120 , 6, 1, NULL),
+(121 , 6, 1, NULL),
+(122 , 6, 1, 2.2),
+(123 , 6, 1, 20.1),
+(124 , 6, 1, -10.4),
+(125 , 6, 1, NULL),
+(126 , 6, 1, NULL),
+(127 , 6, 1, NULL);
+
+
+--sorted_result
+select pk, a, b, min(b) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) as min,
+ max(b) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) as max
+from t1;
+
+--sorted_result
+select pk, a, c, min(c) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) as min,
+ max(c) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) as max
+from t1;
+
+create table t2 (
+ pk int primary key,
+ a int,
+ b int,
+ c char(10)
+);
+
+insert into t2 values
+( 1, 0, 1, 'one'),
+( 2, 0, 2, 'two'),
+( 3, 0, 3, 'three'),
+( 4, 1, 20, 'four'),
+( 5, 1, 10, 'five'),
+( 6, 1, 40, 'six'),
+( 7, 1, 30, 'seven'),
+( 8, 4,300, 'eight'),
+( 9, 4,100, 'nine'),
+(10, 4,200, 'ten'),
+(11, 4,200, 'eleven');
+
+--echo # First try some invalid argument queries.
+select pk, a, b, c,
+ min(c) over (order by pk),
+ max(c) over (order by pk),
+ min(c) over (partition by a order by pk),
+ max(c) over (partition by a order by pk)
+from t2;
+
+
+
+--echo # Empty frame
+
+select pk, a, b, c,
+ min(b) over (order by pk rows between 2 following and 1 following) as min1,
+ max(b) over (order by pk rows between 2 following and 1 following) as max1,
+ min(b) over (partition by a order by pk rows between 2 following and 1 following) as min2,
+ max(b) over (partition by a order by pk rows between 2 following and 1 following) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk range between 2 following and 1 following) as min1,
+ max(b) over (order by pk range between 2 following and 1 following) as max1,
+ min(b) over (partition by a order by pk range between 2 following and 1 following) as min2,
+ max(b) over (partition by a order by pk range between 2 following and 1 following) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk rows between 1 preceding and 2 preceding) as min1,
+ max(b) over (order by pk rows between 1 preceding and 2 preceding) as max1,
+ min(b) over (partition by a order by pk rows between 1 preceding and 2 preceding) as min2,
+ max(b) over (partition by a order by pk rows between 1 preceding and 2 preceding) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk range between 1 preceding and 2 preceding) as min1,
+ max(b) over (order by pk range between 1 preceding and 2 preceding) as max1,
+ min(b) over (partition by a order by pk range between 1 preceding and 2 preceding) as min2,
+ max(b) over (partition by a order by pk range between 1 preceding and 2 preceding) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk rows between 1 following and 0 following) as min1,
+ max(b) over (order by pk rows between 1 following and 0 following) as max1,
+ min(b) over (partition by a order by pk rows between 1 following and 0 following) as min2,
+ max(b) over (partition by a order by pk rows between 1 following and 0 following) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk range between 1 following and 0 following) as min1,
+ max(b) over (order by pk range between 1 following and 0 following) as max1,
+ min(b) over (partition by a order by pk range between 1 following and 0 following) as min2,
+ max(b) over (partition by a order by pk range between 1 following and 0 following) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk rows between 1 following and 0 preceding) as min1,
+ max(b) over (order by pk rows between 1 following and 0 preceding) as max1,
+ min(b) over (partition by a order by pk rows between 1 following and 0 preceding) as min2,
+ max(b) over (partition by a order by pk rows between 1 following and 0 preceding) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk range between 1 following and 0 preceding) as min1,
+ max(b) over (order by pk range between 1 following and 0 preceding) as max1,
+ min(b) over (partition by a order by pk range between 1 following and 0 preceding) as min2,
+ max(b) over (partition by a order by pk range between 1 following and 0 preceding) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk rows between 0 following and 1 preceding) as min1,
+ max(b) over (order by pk rows between 0 following and 1 preceding) as max1,
+ min(b) over (partition by a order by pk rows between 0 following and 1 preceding) as min2,
+ max(b) over (partition by a order by pk rows between 0 following and 1 preceding) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk range between 0 following and 1 preceding) as min1,
+ max(b) over (order by pk range between 0 following and 1 preceding) as max1,
+ min(b) over (partition by a order by pk range between 0 following and 1 preceding) as min2,
+ max(b) over (partition by a order by pk range between 0 following and 1 preceding) as max2
+from t2;
+
+--echo # 1 row frame.
+select pk, a, b, c,
+ min(b) over (order by pk rows between current row and current row) as min1,
+ max(b) over (order by pk rows between current row and current row) as max1,
+ min(b) over (partition by a order by pk rows between current row and current row) as min2,
+ max(b) over (partition by a order by pk rows between current row and current row) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk rows between 0 preceding and current row) as min1,
+ max(b) over (order by pk rows between 0 preceding and current row) as max1,
+ min(b) over (partition by a order by pk rows between 0 preceding and current row) as min2,
+ max(b) over (partition by a order by pk rows between 0 preceding and current row) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk rows between 0 preceding and 0 preceding) as min1,
+ max(b) over (order by pk rows between 0 preceding and 0 preceding) as max1,
+ min(b) over (partition by a order by pk rows between 0 preceding and 0 preceding) as min2,
+ max(b) over (partition by a order by pk rows between 0 preceding and 0 preceding) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk rows between 1 preceding and 1 preceding) as min1,
+ max(b) over (order by pk rows between 1 preceding and 1 preceding) as max1,
+ min(b) over (partition by a order by pk rows between 1 preceding and 1 preceding) as min2,
+ max(b) over (partition by a order by pk rows between 1 preceding and 1 preceding) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk rows between 1 following and 1 following) as min1,
+ max(b) over (order by pk rows between 1 following and 1 following) as max1,
+ min(b) over (partition by a order by pk rows between 1 following and 1 following) as min2,
+ max(b) over (partition by a order by pk rows between 1 following and 1 following) as max2
+from t2;
+
+--echo # Try a larger offset.
+select pk, a, b, c,
+ min(b) over (order by pk rows between 3 following and 3 following) as min1,
+ max(b) over (order by pk rows between 3 following and 3 following) as max1,
+ min(b) over (partition by a order by pk rows between 3 following and 3 following) as min2,
+ max(b) over (partition by a order by pk rows between 3 following and 3 following) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk rows between 3 preceding and 3 preceding) as min1,
+ max(b) over (order by pk rows between 3 preceding and 3 preceding) as max1,
+ min(b) over (partition by a order by pk rows between 3 preceding and 3 preceding) as min2,
+ max(b) over (partition by a order by pk rows between 3 preceding and 3 preceding) as max2
+from t2;
+
+--echo # 2 row frame.
+select pk, a, b, c,
+ min(b) over (order by pk rows between current row and 1 following) as min1,
+ max(b) over (order by pk rows between current row and 1 following) as max1,
+ min(b) over (partition by a order by pk rows between current row and 1 following) as min2,
+ max(b) over (partition by a order by pk rows between current row and 1 following) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk rows between 0 preceding and 1 following) as min1,
+ max(b) over (order by pk rows between 0 preceding and 1 following) as max1,
+ min(b) over (partition by a order by pk rows between 0 preceding and 1 following) as min2,
+ max(b) over (partition by a order by pk rows between 0 preceding and 1 following) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk rows between 1 preceding and current row) as min1,
+ max(b) over (order by pk rows between 1 preceding and current row) as max1,
+ min(b) over (partition by a order by pk rows between 1 preceding and current row) as min2,
+ max(b) over (partition by a order by pk rows between 1 preceding and current row) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk rows between 1 preceding and 0 preceding) as min1,
+ max(b) over (order by pk rows between 1 preceding and 0 preceding) as max1,
+ min(b) over (partition by a order by pk rows between 1 preceding and 0 preceding) as min2,
+ max(b) over (partition by a order by pk rows between 1 preceding and 0 preceding) as max2
+from t2;
+
+--echo # Try a larger frame/offset.
+select pk, a, b, c,
+ min(b) over (order by pk rows between current row and 3 following) as min1,
+ max(b) over (order by pk rows between current row and 3 following) as max1,
+ min(b) over (partition by a order by pk rows between current row and 3 following) as min2,
+ max(b) over (partition by a order by pk rows between current row and 3 following) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk rows between 2 preceding and 1 following) as min1,
+ max(b) over (order by pk rows between 2 preceding and 1 following) as max1,
+ min(b) over (partition by a order by pk rows between 2 preceding and 1 following) as min2,
+ max(b) over (partition by a order by pk rows between 2 preceding and 1 following) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk rows between 3 preceding and current row) as min1,
+ max(b) over (order by pk rows between 3 preceding and current row) as max1,
+ min(b) over (partition by a order by pk rows between 3 preceding and current row) as min2,
+ max(b) over (partition by a order by pk rows between 3 preceding and current row) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk rows between 3 preceding and 0 preceding) as min1,
+ max(b) over (order by pk rows between 3 preceding and 0 preceding) as max1,
+ min(b) over (partition by a order by pk rows between 3 preceding and 0 preceding) as min2,
+ max(b) over (partition by a order by pk rows between 3 preceding and 0 preceding) as max2
+from t2;
+
+--echo # Check range frame bounds
+select pk, a, b, c,
+ min(b) over (order by pk range between current row and current row) as min1,
+ max(b) over (order by pk range between current row and current row) as max1,
+ min(b) over (partition by a order by pk range between current row and current row) as min2,
+ max(b) over (partition by a order by pk range between current row and current row) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk range between 0 preceding and current row) as min1,
+ max(b) over (order by pk range between 0 preceding and current row) as max1,
+ min(b) over (partition by a order by pk range between 0 preceding and current row) as min2,
+ max(b) over (partition by a order by pk range between 0 preceding and current row) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk range between 0 preceding and 0 preceding) as min1,
+ max(b) over (order by pk range between 0 preceding and 0 preceding) as max1,
+ min(b) over (partition by a order by pk range between 0 preceding and 0 preceding) as min2,
+ max(b) over (partition by a order by pk range between 0 preceding and 0 preceding) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk range between 1 preceding and 1 preceding) as min1,
+ max(b) over (order by pk range between 1 preceding and 1 preceding) as max1,
+ min(b) over (partition by a order by pk range between 1 preceding and 1 preceding) as min2,
+ max(b) over (partition by a order by pk range between 1 preceding and 1 preceding) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk range between 1 following and 1 following) as min1,
+ max(b) over (order by pk range between 1 following and 1 following) as max1,
+ min(b) over (partition by a order by pk range between 1 following and 1 following) as min2,
+ max(b) over (partition by a order by pk range between 1 following and 1 following) as max2
+from t2;
+
+--echo # Try a larger offset.
+select pk, a, b, c,
+ min(b) over (order by pk range between 3 following and 3 following) as min1,
+ max(b) over (order by pk range between 3 following and 3 following) as max1,
+ min(b) over (partition by a order by pk range between 3 following and 3 following) as min2,
+ max(b) over (partition by a order by pk range between 3 following and 3 following) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk range between 3 preceding and 3 preceding) as min1,
+ max(b) over (order by pk range between 3 preceding and 3 preceding) as max1,
+ min(b) over (partition by a order by pk range between 3 preceding and 3 preceding) as min2,
+ max(b) over (partition by a order by pk range between 3 preceding and 3 preceding) as max2
+from t2;
+
+--echo # 2 row frame.
+select pk, a, b, c,
+ min(b) over (order by pk range between current row and 1 following) as min1,
+ max(b) over (order by pk range between current row and 1 following) as max1,
+ min(b) over (partition by a order by pk range between current row and 1 following) as min2,
+ max(b) over (partition by a order by pk range between current row and 1 following) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk range between 0 preceding and 1 following) as min1,
+ max(b) over (order by pk range between 0 preceding and 1 following) as max1,
+ min(b) over (partition by a order by pk range between 0 preceding and 1 following) as min2,
+ max(b) over (partition by a order by pk range between 0 preceding and 1 following) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk range between 1 preceding and current row) as min1,
+ max(b) over (order by pk range between 1 preceding and current row) as max1,
+ min(b) over (partition by a order by pk range between 1 preceding and current row) as min2,
+ max(b) over (partition by a order by pk range between 1 preceding and current row) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk range between 1 preceding and 0 preceding) as min1,
+ max(b) over (order by pk range between 1 preceding and 0 preceding) as max1,
+ min(b) over (partition by a order by pk range between 1 preceding and 0 preceding) as min2,
+ max(b) over (partition by a order by pk range between 1 preceding and 0 preceding) as max2
+from t2;
+
+--echo # Try a larger frame/offset.
+select pk, a, b, c,
+ min(b) over (order by pk range between current row and 3 following) as min1,
+ max(b) over (order by pk range between current row and 3 following) as max1,
+ min(b) over (partition by a order by pk range between current row and 3 following) as min2,
+ max(b) over (partition by a order by pk range between current row and 3 following) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk range between 2 preceding and 1 following) as min1,
+ max(b) over (order by pk range between 2 preceding and 1 following) as max1,
+ min(b) over (partition by a order by pk range between 2 preceding and 1 following) as min2,
+ max(b) over (partition by a order by pk range between 2 preceding and 1 following) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk range between 3 preceding and current row) as min1,
+ max(b) over (order by pk range between 3 preceding and current row) as max1,
+ min(b) over (partition by a order by pk range between 3 preceding and current row) as min2,
+ max(b) over (partition by a order by pk range between 3 preceding and current row) as max2
+from t2;
+
+select pk, a, b, c,
+ min(b) over (order by pk range between 3 preceding and 0 preceding) as min1,
+ max(b) over (order by pk range between 3 preceding and 0 preceding) as max1,
+ min(b) over (partition by a order by pk range between 3 preceding and 0 preceding) as min2,
+ max(b) over (partition by a order by pk range between 3 preceding and 0 preceding) as max2
+from t2;
+
+drop table t2;
+drop table t1;