403Webshell
Server IP : 88.99.149.37  /  Your IP : 216.73.216.141
Web Server : nginx/1.31.2
System : Linux server-88-99-149-37 6.12.0-124.56.5.el10_1.x86_64 #1 SMP PREEMPT_DYNAMIC Fri May 15 06:12:08 EDT 2026 x86_64
User : muralimurth ( 1015)
PHP Version : 8.4.23
Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/local/mysql/mysql-test/main/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/local/mysql/mysql-test/main/win_min_max.result
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);
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;
pk	a	b	min	max
101	0	10	10	10
102	0	10	10	10
103	1	10	10	10
104	1	10	10	10
105	2	20	20	20
106	2	20	20	20
107	2	20	10	20
108	2	10	10	20
109	4	20	20	20
110	4	20	20	20
111	5	NULL	1	1
112	5	1	1	1
113	5	NULL	1	1
114	5	NULL	NULL	NULL
115	5	NULL	NULL	NULL
116	6	1	1	1
117	6	1	1	1
118	6	1	1	1
119	6	1	1	1
120	6	1	1	1
121	6	1	1	1
122	6	1	1	1
123	6	1	1	1
124	6	1	1	1
125	6	1	1	1
126	6	1	1	1
127	6	1	1	1
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;
pk	a	c	min	max
101	0	1.1	1.1	2.1
102	0	2.1	1.1	2.1
103	1	3.1	3.1	4.1
104	1	4.1	3.1	4.1
105	2	6.1	6.1	7.1
106	2	7.1	6.1	8.15
107	2	8.15	5.1	8.15
108	2	5.1	5.1	8.15
109	4	9.15	9.15	10.15
110	4	10.15	9.15	10.15
111	5	11.15	11.15	12.25
112	5	12.25	11.15	13.35
113	5	13.35	12.25	14.5
114	5	14.5	13.35	15.65
115	5	15.65	14.5	15.65
116	6	NULL	10	10
117	6	10	1.1	10
118	6	1.1	1.1	10
119	6	NULL	1.1	1.1
120	6	NULL	NULL	NULL
121	6	NULL	2.2	2.2
122	6	2.2	2.2	20.1
123	6	20.1	-10.4	20.1
124	6	-10.4	-10.4	20.1
125	6	NULL	-10.4	-10.4
126	6	NULL	NULL	NULL
127	6	NULL	NULL	NULL
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');
# 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;
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)
1	0	1	one	one	one	one	one
2	0	2	two	one	two	one	two
3	0	3	three	one	two	one	two
4	1	20	four	four	two	four	four
5	1	10	five	five	two	five	four
6	1	40	six	five	two	five	six
7	1	30	seven	five	two	five	six
8	4	300	eight	eight	two	eight	eight
9	4	100	nine	eight	two	eight	nine
10	4	200	ten	eight	two	eight	ten
11	4	200	eleven	eight	two	eight	ten
# 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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	NULL	NULL	NULL	NULL
2	0	2	two	NULL	NULL	NULL	NULL
3	0	3	three	NULL	NULL	NULL	NULL
4	1	20	four	NULL	NULL	NULL	NULL
5	1	10	five	NULL	NULL	NULL	NULL
6	1	40	six	NULL	NULL	NULL	NULL
7	1	30	seven	NULL	NULL	NULL	NULL
8	4	300	eight	NULL	NULL	NULL	NULL
9	4	100	nine	NULL	NULL	NULL	NULL
10	4	200	ten	NULL	NULL	NULL	NULL
11	4	200	eleven	NULL	NULL	NULL	NULL
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	NULL	NULL	NULL	NULL
2	0	2	two	NULL	NULL	NULL	NULL
3	0	3	three	NULL	NULL	NULL	NULL
4	1	20	four	NULL	NULL	NULL	NULL
5	1	10	five	NULL	NULL	NULL	NULL
6	1	40	six	NULL	NULL	NULL	NULL
7	1	30	seven	NULL	NULL	NULL	NULL
8	4	300	eight	NULL	NULL	NULL	NULL
9	4	100	nine	NULL	NULL	NULL	NULL
10	4	200	ten	NULL	NULL	NULL	NULL
11	4	200	eleven	NULL	NULL	NULL	NULL
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	NULL	NULL	NULL	NULL
2	0	2	two	NULL	NULL	NULL	NULL
3	0	3	three	NULL	NULL	NULL	NULL
4	1	20	four	NULL	NULL	NULL	NULL
5	1	10	five	NULL	NULL	NULL	NULL
6	1	40	six	NULL	NULL	NULL	NULL
7	1	30	seven	NULL	NULL	NULL	NULL
8	4	300	eight	NULL	NULL	NULL	NULL
9	4	100	nine	NULL	NULL	NULL	NULL
10	4	200	ten	NULL	NULL	NULL	NULL
11	4	200	eleven	NULL	NULL	NULL	NULL
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	NULL	NULL	NULL	NULL
2	0	2	two	NULL	NULL	NULL	NULL
3	0	3	three	NULL	NULL	NULL	NULL
4	1	20	four	NULL	NULL	NULL	NULL
5	1	10	five	NULL	NULL	NULL	NULL
6	1	40	six	NULL	NULL	NULL	NULL
7	1	30	seven	NULL	NULL	NULL	NULL
8	4	300	eight	NULL	NULL	NULL	NULL
9	4	100	nine	NULL	NULL	NULL	NULL
10	4	200	ten	NULL	NULL	NULL	NULL
11	4	200	eleven	NULL	NULL	NULL	NULL
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	NULL	NULL	NULL	NULL
2	0	2	two	NULL	NULL	NULL	NULL
3	0	3	three	NULL	NULL	NULL	NULL
4	1	20	four	NULL	NULL	NULL	NULL
5	1	10	five	NULL	NULL	NULL	NULL
6	1	40	six	NULL	NULL	NULL	NULL
7	1	30	seven	NULL	NULL	NULL	NULL
8	4	300	eight	NULL	NULL	NULL	NULL
9	4	100	nine	NULL	NULL	NULL	NULL
10	4	200	ten	NULL	NULL	NULL	NULL
11	4	200	eleven	NULL	NULL	NULL	NULL
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	NULL	NULL	NULL	NULL
2	0	2	two	NULL	NULL	NULL	NULL
3	0	3	three	NULL	NULL	NULL	NULL
4	1	20	four	NULL	NULL	NULL	NULL
5	1	10	five	NULL	NULL	NULL	NULL
6	1	40	six	NULL	NULL	NULL	NULL
7	1	30	seven	NULL	NULL	NULL	NULL
8	4	300	eight	NULL	NULL	NULL	NULL
9	4	100	nine	NULL	NULL	NULL	NULL
10	4	200	ten	NULL	NULL	NULL	NULL
11	4	200	eleven	NULL	NULL	NULL	NULL
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	NULL	NULL	NULL	NULL
2	0	2	two	NULL	NULL	NULL	NULL
3	0	3	three	NULL	NULL	NULL	NULL
4	1	20	four	NULL	NULL	NULL	NULL
5	1	10	five	NULL	NULL	NULL	NULL
6	1	40	six	NULL	NULL	NULL	NULL
7	1	30	seven	NULL	NULL	NULL	NULL
8	4	300	eight	NULL	NULL	NULL	NULL
9	4	100	nine	NULL	NULL	NULL	NULL
10	4	200	ten	NULL	NULL	NULL	NULL
11	4	200	eleven	NULL	NULL	NULL	NULL
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	NULL	NULL	NULL	NULL
2	0	2	two	NULL	NULL	NULL	NULL
3	0	3	three	NULL	NULL	NULL	NULL
4	1	20	four	NULL	NULL	NULL	NULL
5	1	10	five	NULL	NULL	NULL	NULL
6	1	40	six	NULL	NULL	NULL	NULL
7	1	30	seven	NULL	NULL	NULL	NULL
8	4	300	eight	NULL	NULL	NULL	NULL
9	4	100	nine	NULL	NULL	NULL	NULL
10	4	200	ten	NULL	NULL	NULL	NULL
11	4	200	eleven	NULL	NULL	NULL	NULL
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	NULL	NULL	NULL	NULL
2	0	2	two	NULL	NULL	NULL	NULL
3	0	3	three	NULL	NULL	NULL	NULL
4	1	20	four	NULL	NULL	NULL	NULL
5	1	10	five	NULL	NULL	NULL	NULL
6	1	40	six	NULL	NULL	NULL	NULL
7	1	30	seven	NULL	NULL	NULL	NULL
8	4	300	eight	NULL	NULL	NULL	NULL
9	4	100	nine	NULL	NULL	NULL	NULL
10	4	200	ten	NULL	NULL	NULL	NULL
11	4	200	eleven	NULL	NULL	NULL	NULL
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	NULL	NULL	NULL	NULL
2	0	2	two	NULL	NULL	NULL	NULL
3	0	3	three	NULL	NULL	NULL	NULL
4	1	20	four	NULL	NULL	NULL	NULL
5	1	10	five	NULL	NULL	NULL	NULL
6	1	40	six	NULL	NULL	NULL	NULL
7	1	30	seven	NULL	NULL	NULL	NULL
8	4	300	eight	NULL	NULL	NULL	NULL
9	4	100	nine	NULL	NULL	NULL	NULL
10	4	200	ten	NULL	NULL	NULL	NULL
11	4	200	eleven	NULL	NULL	NULL	NULL
# 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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	1	1	1
2	0	2	two	2	2	2	2
3	0	3	three	3	3	3	3
4	1	20	four	20	20	20	20
5	1	10	five	10	10	10	10
6	1	40	six	40	40	40	40
7	1	30	seven	30	30	30	30
8	4	300	eight	300	300	300	300
9	4	100	nine	100	100	100	100
10	4	200	ten	200	200	200	200
11	4	200	eleven	200	200	200	200
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	1	1	1
2	0	2	two	2	2	2	2
3	0	3	three	3	3	3	3
4	1	20	four	20	20	20	20
5	1	10	five	10	10	10	10
6	1	40	six	40	40	40	40
7	1	30	seven	30	30	30	30
8	4	300	eight	300	300	300	300
9	4	100	nine	100	100	100	100
10	4	200	ten	200	200	200	200
11	4	200	eleven	200	200	200	200
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	1	1	1
2	0	2	two	2	2	2	2
3	0	3	three	3	3	3	3
4	1	20	four	20	20	20	20
5	1	10	five	10	10	10	10
6	1	40	six	40	40	40	40
7	1	30	seven	30	30	30	30
8	4	300	eight	300	300	300	300
9	4	100	nine	100	100	100	100
10	4	200	ten	200	200	200	200
11	4	200	eleven	200	200	200	200
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	NULL	NULL	NULL	NULL
2	0	2	two	1	1	1	1
3	0	3	three	2	2	2	2
4	1	20	four	3	3	NULL	NULL
5	1	10	five	20	20	20	20
6	1	40	six	10	10	10	10
7	1	30	seven	40	40	40	40
8	4	300	eight	30	30	NULL	NULL
9	4	100	nine	300	300	300	300
10	4	200	ten	100	100	100	100
11	4	200	eleven	200	200	200	200
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	2	2	2	2
2	0	2	two	3	3	3	3
3	0	3	three	20	20	NULL	NULL
4	1	20	four	10	10	10	10
5	1	10	five	40	40	40	40
6	1	40	six	30	30	30	30
7	1	30	seven	300	300	NULL	NULL
8	4	300	eight	100	100	100	100
9	4	100	nine	200	200	200	200
10	4	200	ten	200	200	200	200
11	4	200	eleven	NULL	NULL	NULL	NULL
# 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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	20	20	NULL	NULL
2	0	2	two	10	10	NULL	NULL
3	0	3	three	40	40	NULL	NULL
4	1	20	four	30	30	30	30
5	1	10	five	300	300	NULL	NULL
6	1	40	six	100	100	NULL	NULL
7	1	30	seven	200	200	NULL	NULL
8	4	300	eight	200	200	200	200
9	4	100	nine	NULL	NULL	NULL	NULL
10	4	200	ten	NULL	NULL	NULL	NULL
11	4	200	eleven	NULL	NULL	NULL	NULL
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	NULL	NULL	NULL	NULL
2	0	2	two	NULL	NULL	NULL	NULL
3	0	3	three	NULL	NULL	NULL	NULL
4	1	20	four	1	1	NULL	NULL
5	1	10	five	2	2	NULL	NULL
6	1	40	six	3	3	NULL	NULL
7	1	30	seven	20	20	20	20
8	4	300	eight	10	10	NULL	NULL
9	4	100	nine	40	40	NULL	NULL
10	4	200	ten	30	30	NULL	NULL
11	4	200	eleven	300	300	300	300
# 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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	2	1	2
2	0	2	two	2	3	2	3
3	0	3	three	3	20	3	3
4	1	20	four	10	20	10	20
5	1	10	five	10	40	10	40
6	1	40	six	30	40	30	40
7	1	30	seven	30	300	30	30
8	4	300	eight	100	300	100	300
9	4	100	nine	100	200	100	200
10	4	200	ten	200	200	200	200
11	4	200	eleven	200	200	200	200
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	2	1	2
2	0	2	two	2	3	2	3
3	0	3	three	3	20	3	3
4	1	20	four	10	20	10	20
5	1	10	five	10	40	10	40
6	1	40	six	30	40	30	40
7	1	30	seven	30	300	30	30
8	4	300	eight	100	300	100	300
9	4	100	nine	100	200	100	200
10	4	200	ten	200	200	200	200
11	4	200	eleven	200	200	200	200
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	1	1	1
2	0	2	two	1	2	1	2
3	0	3	three	2	3	2	3
4	1	20	four	3	20	20	20
5	1	10	five	10	20	10	20
6	1	40	six	10	40	10	40
7	1	30	seven	30	40	30	40
8	4	300	eight	30	300	300	300
9	4	100	nine	100	300	100	300
10	4	200	ten	100	200	100	200
11	4	200	eleven	200	200	200	200
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	1	1	1
2	0	2	two	1	2	1	2
3	0	3	three	2	3	2	3
4	1	20	four	3	20	20	20
5	1	10	five	10	20	10	20
6	1	40	six	10	40	10	40
7	1	30	seven	30	40	30	40
8	4	300	eight	30	300	300	300
9	4	100	nine	100	300	100	300
10	4	200	ten	100	200	100	200
11	4	200	eleven	200	200	200	200
# 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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	20	1	3
2	0	2	two	2	20	2	3
3	0	3	three	3	40	3	3
4	1	20	four	10	40	10	40
5	1	10	five	10	300	10	40
6	1	40	six	30	300	30	40
7	1	30	seven	30	300	30	30
8	4	300	eight	100	300	100	300
9	4	100	nine	100	200	100	200
10	4	200	ten	200	200	200	200
11	4	200	eleven	200	200	200	200
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	2	1	2
2	0	2	two	1	3	1	3
3	0	3	three	1	20	1	3
4	1	20	four	2	20	10	20
5	1	10	five	3	40	10	40
6	1	40	six	10	40	10	40
7	1	30	seven	10	300	10	40
8	4	300	eight	30	300	100	300
9	4	100	nine	30	300	100	300
10	4	200	ten	100	300	100	300
11	4	200	eleven	100	200	100	200
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	1	1	1
2	0	2	two	1	2	1	2
3	0	3	three	1	3	1	3
4	1	20	four	1	20	20	20
5	1	10	five	2	20	10	20
6	1	40	six	3	40	10	40
7	1	30	seven	10	40	10	40
8	4	300	eight	10	300	300	300
9	4	100	nine	30	300	100	300
10	4	200	ten	30	300	100	300
11	4	200	eleven	100	300	100	300
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	1	1	1
2	0	2	two	1	2	1	2
3	0	3	three	1	3	1	3
4	1	20	four	1	20	20	20
5	1	10	five	2	20	10	20
6	1	40	six	3	40	10	40
7	1	30	seven	10	40	10	40
8	4	300	eight	10	300	300	300
9	4	100	nine	30	300	100	300
10	4	200	ten	30	300	100	300
11	4	200	eleven	100	300	100	300
# 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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	1	1	1
2	0	2	two	2	2	2	2
3	0	3	three	3	3	3	3
4	1	20	four	20	20	20	20
5	1	10	five	10	10	10	10
6	1	40	six	40	40	40	40
7	1	30	seven	30	30	30	30
8	4	300	eight	300	300	300	300
9	4	100	nine	100	100	100	100
10	4	200	ten	200	200	200	200
11	4	200	eleven	200	200	200	200
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	1	1	1
2	0	2	two	2	2	2	2
3	0	3	three	3	3	3	3
4	1	20	four	20	20	20	20
5	1	10	five	10	10	10	10
6	1	40	six	40	40	40	40
7	1	30	seven	30	30	30	30
8	4	300	eight	300	300	300	300
9	4	100	nine	100	100	100	100
10	4	200	ten	200	200	200	200
11	4	200	eleven	200	200	200	200
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	1	1	1
2	0	2	two	2	2	2	2
3	0	3	three	3	3	3	3
4	1	20	four	20	20	20	20
5	1	10	five	10	10	10	10
6	1	40	six	40	40	40	40
7	1	30	seven	30	30	30	30
8	4	300	eight	300	300	300	300
9	4	100	nine	100	100	100	100
10	4	200	ten	200	200	200	200
11	4	200	eleven	200	200	200	200
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	NULL	NULL	NULL	NULL
2	0	2	two	1	1	1	1
3	0	3	three	2	2	2	2
4	1	20	four	3	3	NULL	NULL
5	1	10	five	20	20	20	20
6	1	40	six	10	10	10	10
7	1	30	seven	40	40	40	40
8	4	300	eight	30	30	NULL	NULL
9	4	100	nine	300	300	300	300
10	4	200	ten	100	100	100	100
11	4	200	eleven	200	200	200	200
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	2	2	2	2
2	0	2	two	3	3	3	3
3	0	3	three	20	20	NULL	NULL
4	1	20	four	10	10	10	10
5	1	10	five	40	40	40	40
6	1	40	six	30	30	30	30
7	1	30	seven	300	300	NULL	NULL
8	4	300	eight	100	100	100	100
9	4	100	nine	200	200	200	200
10	4	200	ten	200	200	200	200
11	4	200	eleven	NULL	NULL	NULL	NULL
# 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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	20	20	NULL	NULL
2	0	2	two	10	10	NULL	NULL
3	0	3	three	40	40	NULL	NULL
4	1	20	four	30	30	30	30
5	1	10	five	300	300	NULL	NULL
6	1	40	six	100	100	NULL	NULL
7	1	30	seven	200	200	NULL	NULL
8	4	300	eight	200	200	200	200
9	4	100	nine	NULL	NULL	NULL	NULL
10	4	200	ten	NULL	NULL	NULL	NULL
11	4	200	eleven	NULL	NULL	NULL	NULL
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	NULL	NULL	NULL	NULL
2	0	2	two	NULL	NULL	NULL	NULL
3	0	3	three	NULL	NULL	NULL	NULL
4	1	20	four	1	1	NULL	NULL
5	1	10	five	2	2	NULL	NULL
6	1	40	six	3	3	NULL	NULL
7	1	30	seven	20	20	20	20
8	4	300	eight	10	10	NULL	NULL
9	4	100	nine	40	40	NULL	NULL
10	4	200	ten	30	30	NULL	NULL
11	4	200	eleven	300	300	300	300
# 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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	2	1	2
2	0	2	two	2	3	2	3
3	0	3	three	3	20	3	3
4	1	20	four	10	20	10	20
5	1	10	five	10	40	10	40
6	1	40	six	30	40	30	40
7	1	30	seven	30	300	30	30
8	4	300	eight	100	300	100	300
9	4	100	nine	100	200	100	200
10	4	200	ten	200	200	200	200
11	4	200	eleven	200	200	200	200
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	2	1	2
2	0	2	two	2	3	2	3
3	0	3	three	3	20	3	3
4	1	20	four	10	20	10	20
5	1	10	five	10	40	10	40
6	1	40	six	30	40	30	40
7	1	30	seven	30	300	30	30
8	4	300	eight	100	300	100	300
9	4	100	nine	100	200	100	200
10	4	200	ten	200	200	200	200
11	4	200	eleven	200	200	200	200
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	1	1	1
2	0	2	two	1	2	1	2
3	0	3	three	2	3	2	3
4	1	20	four	3	20	20	20
5	1	10	five	10	20	10	20
6	1	40	six	10	40	10	40
7	1	30	seven	30	40	30	40
8	4	300	eight	30	300	300	300
9	4	100	nine	100	300	100	300
10	4	200	ten	100	200	100	200
11	4	200	eleven	200	200	200	200
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	1	1	1
2	0	2	two	1	2	1	2
3	0	3	three	2	3	2	3
4	1	20	four	3	20	20	20
5	1	10	five	10	20	10	20
6	1	40	six	10	40	10	40
7	1	30	seven	30	40	30	40
8	4	300	eight	30	300	300	300
9	4	100	nine	100	300	100	300
10	4	200	ten	100	200	100	200
11	4	200	eleven	200	200	200	200
# 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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	20	1	3
2	0	2	two	2	20	2	3
3	0	3	three	3	40	3	3
4	1	20	four	10	40	10	40
5	1	10	five	10	300	10	40
6	1	40	six	30	300	30	40
7	1	30	seven	30	300	30	30
8	4	300	eight	100	300	100	300
9	4	100	nine	100	200	100	200
10	4	200	ten	200	200	200	200
11	4	200	eleven	200	200	200	200
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	2	1	2
2	0	2	two	1	3	1	3
3	0	3	three	1	20	1	3
4	1	20	four	2	20	10	20
5	1	10	five	3	40	10	40
6	1	40	six	10	40	10	40
7	1	30	seven	10	300	10	40
8	4	300	eight	30	300	100	300
9	4	100	nine	30	300	100	300
10	4	200	ten	100	300	100	300
11	4	200	eleven	100	200	100	200
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	1	1	1
2	0	2	two	1	2	1	2
3	0	3	three	1	3	1	3
4	1	20	four	1	20	20	20
5	1	10	five	2	20	10	20
6	1	40	six	3	40	10	40
7	1	30	seven	10	40	10	40
8	4	300	eight	10	300	300	300
9	4	100	nine	30	300	100	300
10	4	200	ten	30	300	100	300
11	4	200	eleven	100	300	100	300
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;
pk	a	b	c	min1	max1	min2	max2
1	0	1	one	1	1	1	1
2	0	2	two	1	2	1	2
3	0	3	three	1	3	1	3
4	1	20	four	1	20	20	20
5	1	10	five	2	20	10	20
6	1	40	six	3	40	10	40
7	1	30	seven	10	40	10	40
8	4	300	eight	10	300	300	300
9	4	100	nine	30	300	100	300
10	4	200	ten	30	300	100	300
11	4	200	eleven	100	300	100	300
drop table t2;
drop table t1;

Youez - 2016 - github.com/yon3zu
LinuXploit