Fix a problem causing the recovery extension to use excessive memory and CPU time...
[sqlite.git] / test / window4.test
blob4194f75355e6d1cf5f8a0d463d828b228bd3befa
1 # 2018 June 04
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
6 #    May you do good and not evil.
7 #    May you find forgiveness for yourself and forgive others.
8 #    May you share freely, never taking more than you give.
10 #***********************************************************************
11 # This file implements regression tests for SQLite library.
14 ####################################################
15 # DO NOT EDIT! THIS FILE IS AUTOMATICALLY GENERATED!
16 ####################################################
18 set testdir [file dirname $argv0]
19 source $testdir/tester.tcl
20 set testprefix window4
22 ifcapable !windowfunc { finish_test ; return }
23 do_execsql_test 1.0 {
24   DROP TABLE IF EXISTS t3;
25   CREATE TABLE t3(a TEXT PRIMARY KEY);
26   INSERT INTO t3 VALUES('a'), ('b'), ('c'), ('d'), ('e');
27   INSERT INTO t3 VALUES('f'), ('g'), ('h'), ('i'), ('j');
28 } {}
30 do_execsql_test 1.1 {
31   SELECT a, ntile(1) OVER (ORDER BY a) FROM t3
32 } {a 1   b 1   c 1   d 1   e 1   f 1   g 1   h 1   i 1   j 1}
34 do_execsql_test 1.2 {
35   SELECT a, ntile(2) OVER (ORDER BY a) FROM t3
36 } {a 1   b 1   c 1   d 1   e 1   f 2   g 2   h 2   i 2   j 2}
38 do_execsql_test 1.3 {
39   SELECT a, ntile(3) OVER (ORDER BY a) FROM t3
40 } {a 1   b 1   c 1   d 1   e 2   f 2   g 2   h 3   i 3   j 3}
42 do_execsql_test 1.4 {
43   SELECT a, ntile(4) OVER (ORDER BY a) FROM t3
44 } {a 1   b 1   c 1   d 2   e 2   f 2   g 3   h 3   i 4   j 4}
46 do_execsql_test 1.5 {
47   SELECT a, ntile(5) OVER (ORDER BY a) FROM t3
48 } {a 1   b 1   c 2   d 2   e 3   f 3   g 4   h 4   i 5   j 5}
50 do_execsql_test 1.6 {
51   SELECT a, ntile(6) OVER (ORDER BY a) FROM t3
52 } {a 1   b 1   c 2   d 2   e 3   f 3   g 4   h 4   i 5   j 6}
54 do_execsql_test 1.7 {
55   SELECT a, ntile(7) OVER (ORDER BY a) FROM t3
56 } {a 1   b 1   c 2   d 2   e 3   f 3   g 4   h 5   i 6   j 7}
58 do_execsql_test 1.8 {
59   SELECT a, ntile(8) OVER (ORDER BY a) FROM t3
60 } {a 1   b 1   c 2   d 2   e 3   f 4   g 5   h 6   i 7   j 8}
62 do_execsql_test 1.9 {
63   SELECT a, ntile(9) OVER (ORDER BY a) FROM t3
64 } {a 1   b 1   c 2   d 3   e 4   f 5   g 6   h 7   i 8   j 9}
66 do_execsql_test 1.10 {
67   SELECT a, ntile(10) OVER (ORDER BY a) FROM t3
68 } {a 1   b 2   c 3   d 4   e 5   f 6   g 7   h 8   i 9   j 10}
70 do_execsql_test 1.11 {
71   SELECT a, ntile(11) OVER (ORDER BY a) FROM t3
72 } {a 1   b 2   c 3   d 4   e 5   f 6   g 7   h 8   i 9   j 10}
74 do_execsql_test 1.12 {
75   SELECT a, ntile(12) OVER (ORDER BY a) FROM t3
76 } {a 1   b 2   c 3   d 4   e 5   f 6   g 7   h 8   i 9   j 10}
78 do_execsql_test 1.13 {
79   SELECT a, ntile(13) OVER (ORDER BY a) FROM t3
80 } {a 1   b 2   c 3   d 4   e 5   f 6   g 7   h 8   i 9   j 10}
82 do_execsql_test 1.14 {
83   SELECT a, ntile(14) OVER (ORDER BY a) FROM t3
84 } {a 1   b 2   c 3   d 4   e 5   f 6   g 7   h 8   i 9   j 10}
86 do_execsql_test 1.15 {
87   SELECT a, ntile(15) OVER (ORDER BY a) FROM t3
88 } {a 1   b 2   c 3   d 4   e 5   f 6   g 7   h 8   i 9   j 10}
90 do_execsql_test 1.16 {
91   SELECT a, ntile(16) OVER (ORDER BY a) FROM t3
92 } {a 1   b 2   c 3   d 4   e 5   f 6   g 7   h 8   i 9   j 10}
94 do_execsql_test 1.17 {
95   SELECT a, ntile(17) OVER (ORDER BY a) FROM t3
96 } {a 1   b 2   c 3   d 4   e 5   f 6   g 7   h 8   i 9   j 10}
98 do_execsql_test 1.18 {
99   SELECT a, ntile(18) OVER (ORDER BY a) FROM t3
100 } {a 1   b 2   c 3   d 4   e 5   f 6   g 7   h 8   i 9   j 10}
102 do_execsql_test 1.19 {
103   SELECT a, ntile(19) OVER (ORDER BY a) FROM t3
104 } {a 1   b 2   c 3   d 4   e 5   f 6   g 7   h 8   i 9   j 10}
106 do_execsql_test 2.0 {
107   DROP TABLE IF EXISTS t4;
108   CREATE TABLE t4(a INTEGER PRIMARY KEY, b TEXT, c INTEGER);
109   INSERT INTO t4 VALUES(1, 'A', 9);
110   INSERT INTO t4 VALUES(2, 'B', 3);
111   INSERT INTO t4 VALUES(3, 'C', 2);
112   INSERT INTO t4 VALUES(4, 'D', 10);
113   INSERT INTO t4 VALUES(5, 'E', 5);
114   INSERT INTO t4 VALUES(6, 'F', 1);
115   INSERT INTO t4 VALUES(7, 'G', 1);
116   INSERT INTO t4 VALUES(8, 'H', 2);
117   INSERT INTO t4 VALUES(9, 'I', 10);
118   INSERT INTO t4 VALUES(10, 'J', 4);
119 } {}
121 do_execsql_test 2.1 {
122   SELECT a, nth_value(b, c) OVER (ORDER BY a) FROM t4
123 } {1 {}   2 {}   3 B   4 {}   5 E   6 A   7 A   8 B   9 {}   10 D}
125 do_execsql_test 2.2.1 {
126   SELECT a, lead(b) OVER (ORDER BY a) FROM t4
127 } {1 B   2 C   3 D   4 E   5 F   6 G   7 H   8 I   9 J   10 {}}
129 do_execsql_test 2.2.2 {
130   SELECT a, lead(b, 2) OVER (ORDER BY a) FROM t4
131 } {1 C   2 D   3 E   4 F   5 G   6 H   7 I   8 J   9 {}   10 {}}
133 do_execsql_test 2.2.3 {
134   SELECT a, lead(b, 3, 'abc') OVER (ORDER BY a) FROM t4
135 } {1 D   2 E   3 F   4 G   5 H   6 I   7 J   8 abc   9 abc   10 abc}
137 do_execsql_test 2.3.1 {
138   SELECT a, lag(b) OVER (ORDER BY a) FROM t4
139 } {1 {}   2 A   3 B   4 C   5 D   6 E   7 F   8 G   9 H   10 I}
141 do_execsql_test 2.3.2 {
142   SELECT a, lag(b, 2) OVER (ORDER BY a) FROM t4
143 } {1 {}   2 {}   3 A   4 B   5 C   6 D   7 E   8 F   9 G   10 H}
145 do_execsql_test 2.3.3 {
146   SELECT a, lag(b, 3, 'abc') OVER (ORDER BY a) FROM t4
147 } {1 abc   2 abc   3 abc   4 A   5 B   6 C   7 D   8 E   9 F   10 G}
149 do_execsql_test 2.4.1 {
150   SELECT group_concat(b, '.') OVER (
151     ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
152   ) FROM t4
153 } {A.B.C.D.E.F.G.H.I.J   B.C.D.E.F.G.H.I.J   C.D.E.F.G.H.I.J   D.E.F.G.H.I.J
154   E.F.G.H.I.J   F.G.H.I.J   G.H.I.J   H.I.J   I.J   J}
156 do_execsql_test 3.0 {
157   DROP TABLE IF EXISTS t5;
158   CREATE TABLE t5(a INTEGER PRIMARY KEY, b TEXT, c TEXT, d INTEGER);
159   INSERT INTO t5 VALUES(1, 'A', 'one',   5);
160   INSERT INTO t5 VALUES(2, 'B', 'two',   4);
161   INSERT INTO t5 VALUES(3, 'A', 'three', 3);
162   INSERT INTO t5 VALUES(4, 'B', 'four',  2);
163   INSERT INTO t5 VALUES(5, 'A', 'five',  1);
164 } {}
166 do_execsql_test 3.1 {
167   SELECT a, nth_value(c, d) OVER (ORDER BY b) FROM t5
168 } {1 {}   3 five   5 one   2 two   4 three}
170 do_execsql_test 3.2 {
171   SELECT a, nth_value(c, d) OVER (PARTITION BY b ORDER BY a) FROM t5
172 } {1 {}   3 {}   5 one   2 {}   4 four}
174 do_execsql_test 3.3 {
175   SELECT a, count(*) OVER abc, count(*) OVER def FROM t5
176   WINDOW abc AS (ORDER BY a), 
177          def AS (ORDER BY a DESC)
178   ORDER BY a;
179 } {1 1 5   2 2 4   3 3 3   4 4 2   5 5 1}
181 do_execsql_test 3.4 {
182   SELECT a, max(a) FILTER (WHERE (a%2)=0) OVER w FROM t5 
183   WINDOW w AS (ORDER BY a)
184 } {1 {}   2 2   3 2   4 4   5 4}
186 do_execsql_test 3.5.1 {
187   SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 2 PRECEDING)
188   FROM t5
189 } {1 {}   2 {}   3 {}   4 {}   5 {}}
191 do_execsql_test 3.5.2 {
192   SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
193   FROM t5
194 } {1 {}   2 one   3 two   4 three   5 four}
196 do_execsql_test 3.5.3 {
197   SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 0 PRECEDING AND 0 PRECEDING)
198   FROM t5
199 } {1 one   2 two   3 three   4 four   5 five}
201 do_execsql_test 3.6.1 {
202   SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 1 FOLLOWING)
203   FROM t5
204 } {1 {}   2 {}   3 {}   4 {}   5 {}}
206 do_execsql_test 3.6.2 {
207   SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING)
208   FROM t5
209 } {1 two   2 three   3 four   4 five   5 {}}
211 do_execsql_test 3.6.3 {
212   SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 0 FOLLOWING AND 0 FOLLOWING)
213   FROM t5
214 } {1 one   2 two   3 three   4 four   5 five}
216 #==========================================================================
218 do_execsql_test 4.0 {
219   DROP TABLE IF EXISTS ttt;
220   CREATE TABLE ttt(a INTEGER PRIMARY KEY, b INTEGER, c INTEGER);
221   INSERT INTO ttt VALUES(1, 1, 1);
222   INSERT INTO ttt VALUES(2, 2, 2);
223   INSERT INTO ttt VALUES(3, 3, 3);
225   INSERT INTO ttt VALUES(4, 1, 2);
226   INSERT INTO ttt VALUES(5, 2, 3);
227   INSERT INTO ttt VALUES(6, 3, 4);
229   INSERT INTO ttt VALUES(7, 1, 3);
230   INSERT INTO ttt VALUES(8, 2, 4);
231   INSERT INTO ttt VALUES(9, 3, 5);
232 } {}
234 do_execsql_test 4.1 {
235   SELECT max(c), max(b) OVER (ORDER BY b) FROM ttt GROUP BY b;
236 } {3 1   4 2   5 3}
238 do_execsql_test 4.2 {
239   SELECT max(b) OVER (ORDER BY max(c)) FROM ttt GROUP BY b;
240 } {1   2   3}
242 do_execsql_test 4.3 {
243   SELECT abs(max(b) OVER (ORDER BY b)) FROM ttt GROUP BY b;
244 } {1   2   3}
246 do_execsql_test 4.4 {
247   SELECT sum(b) OVER (
248     ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
249   ) FROM ttt;
250 } {18   17   15   12   11   9   6   5   3}
252 do_execsql_test 4.5.1.1 {
253   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
254   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
255   FROM ttt ORDER BY a
256 } {1 1   2 2   3 3   2 1   3 2   4 3   3 1   4 2   5 3}
258 do_execsql_test 4.5.1.2 {
259   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
260          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
261   FROM ttt ORDER BY a
262 } {1 1   2 2   3 3   3 3   5 5   7 7   6 6   9 9   12 12}
264 do_execsql_test 4.5.2.1 {
265   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
266   min(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
267   FROM ttt ORDER BY a
268 } {1 1   2 2   3 3   2 2   3 3   4 4   3 3   4 4   5 5}
270 do_execsql_test 4.5.2.2 {
271   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
272          sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
273   FROM ttt ORDER BY a
274 } {1 1   2 2   3 3   3 2   5 3   7 4   6 3   9 4   12 5}
276 do_execsql_test 4.5.3.1 {
277   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
278   min(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
279   FROM ttt ORDER BY a
280 } {1 1   2 1   3 1   2 1   3 1   4 1   3 1   4 1   5 1}
282 do_execsql_test 4.5.3.2 {
283   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
284          sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
285   FROM ttt ORDER BY a
286 } {1 1   2 3   3 6   3 8   5 11   7 15   6 18   9 22   12 27}
288 do_execsql_test 4.5.4.1 {
289   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
290   min(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
291   FROM ttt ORDER BY a
292 } {1 1   2 2   3 3   2 2   3 3   4 4   3 3   4 4   5 5}
294 do_execsql_test 4.5.4.2 {
295   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
296          sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
297   FROM ttt ORDER BY a
298 } {1 1   2 2   3 3   3 2   5 3   7 4   6 3   9 4   12 5}
300 do_execsql_test 4.5.5.1 {
301   SELECT max(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
302   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
303   FROM ttt ORDER BY a
304 } {1 1   2 2   3 3   2 1   3 2   4 3   3 1   4 2   5 3}
306 do_execsql_test 4.5.5.2 {
307   SELECT sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
308          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
309   FROM ttt ORDER BY a
310 } {1 1   2 2   3 3   2 3   3 5   4 7   3 6   4 9   5 12}
312 do_execsql_test 4.5.6.1 {
313   SELECT max(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
314   min(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
315   FROM ttt ORDER BY a
316 } {1 1   2 2   3 3   2 2   3 3   4 4   3 3   4 4   5 5}
318 do_execsql_test 4.5.6.2 {
319   SELECT sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
320          sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
321   FROM ttt ORDER BY a
322 } {1 1   2 2   3 3   2 2   3 3   4 4   3 3   4 4   5 5}
324 do_execsql_test 4.5.7.1 {
325   SELECT max(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
326   min(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
327   FROM ttt ORDER BY a
328 } {1 1   2 1   3 1   2 1   3 1   4 1   3 1   4 1   5 1}
330 do_execsql_test 4.5.7.2 {
331   SELECT sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
332          sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
333   FROM ttt ORDER BY a
334 } {1 1   2 3   3 6   2 8   3 11   4 15   3 18   4 22   5 27}
336 do_execsql_test 4.5.8.1 {
337   SELECT max(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
338   min(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
339   FROM ttt ORDER BY a
340 } {1 1   2 2   3 3   2 2   3 3   4 4   3 3   4 4   5 5}
342 do_execsql_test 4.5.8.2 {
343   SELECT sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
344          sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
345   FROM ttt ORDER BY a
346 } {1 1   2 2   3 3   2 2   3 3   4 4   3 3   4 4   5 5}
348 do_execsql_test 4.5.9.1 {
349   SELECT max(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
350   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
351   FROM ttt ORDER BY a
352 } {1 1   2 2   3 3   3 1   3 2   4 3   4 1   4 2   5 3}
354 do_execsql_test 4.5.9.2 {
355   SELECT sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
356          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
357   FROM ttt ORDER BY a
358 } {1 1   3 2   6 3   8 3   11 5   15 7   18 6   22 9   27 12}
360 do_execsql_test 4.5.10.1 {
361   SELECT max(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
362   min(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
363   FROM ttt ORDER BY a
364 } {1 1   2 2   3 3   3 2   3 3   4 4   4 3   4 4   5 5}
366 do_execsql_test 4.5.10.2 {
367   SELECT sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
368          sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
369   FROM ttt ORDER BY a
370 } {1 1   3 2   6 3   8 2   11 3   15 4   18 3   22 4   27 5}
372 do_execsql_test 4.5.11.1 {
373   SELECT max(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
374   min(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
375   FROM ttt ORDER BY a
376 } {1 1   2 1   3 1   3 1   3 1   4 1   4 1   4 1   5 1}
378 do_execsql_test 4.5.11.2 {
379   SELECT sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
380          sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
381   FROM ttt ORDER BY a
382 } {1 1   3 3   6 6   8 8   11 11   15 15   18 18   22 22   27 27}
384 do_execsql_test 4.5.12.1 {
385   SELECT max(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
386   min(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
387   FROM ttt ORDER BY a
388 } {1 1   2 2   3 3   3 2   3 3   4 4   4 3   4 4   5 5}
390 do_execsql_test 4.5.12.2 {
391   SELECT sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
392          sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
393   FROM ttt ORDER BY a
394 } {1 1   3 2   6 3   8 2   11 3   15 4   18 3   22 4   27 5}
396 do_execsql_test 4.5.13.1 {
397   SELECT max(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
398   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
399   FROM ttt ORDER BY a
400 } {1 1   2 2   3 3   2 1   3 2   4 3   3 1   4 2   5 3}
402 do_execsql_test 4.5.13.2 {
403   SELECT sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
404          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
405   FROM ttt ORDER BY a
406 } {1 1   2 2   3 3   2 3   3 5   4 7   3 6   4 9   5 12}
408 do_execsql_test 4.5.14.1 {
409   SELECT max(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
410   min(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
411   FROM ttt ORDER BY a
412 } {1 1   2 2   3 3   2 2   3 3   4 4   3 3   4 4   5 5}
414 do_execsql_test 4.5.14.2 {
415   SELECT sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
416          sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
417   FROM ttt ORDER BY a
418 } {1 1   2 2   3 3   2 2   3 3   4 4   3 3   4 4   5 5}
420 do_execsql_test 4.5.15.1 {
421   SELECT max(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
422   min(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
423   FROM ttt ORDER BY a
424 } {1 1   2 1   3 1   2 1   3 1   4 1   3 1   4 1   5 1}
426 do_execsql_test 4.5.15.2 {
427   SELECT sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
428          sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
429   FROM ttt ORDER BY a
430 } {1 1   2 3   3 6   2 8   3 11   4 15   3 18   4 22   5 27}
432 do_execsql_test 4.5.16.1 {
433   SELECT max(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
434   min(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
435   FROM ttt ORDER BY a
436 } {1 1   2 2   3 3   2 2   3 3   4 4   3 3   4 4   5 5}
438 do_execsql_test 4.5.16.2 {
439   SELECT sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
440          sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
441   FROM ttt ORDER BY a
442 } {1 1   2 2   3 3   2 2   3 3   4 4   3 3   4 4   5 5}
444 do_execsql_test 4.5.17.1 {
445   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
446   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
447   FROM ttt ORDER BY a
448 } {1 1   2 2   3 3   2 1   3 2   4 3   3 1   4 2   5 3}
450 do_execsql_test 4.5.17.2 {
451   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
452          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
453   FROM ttt ORDER BY a
454 } {1 1   2 2   3 3   3 3   5 5   7 7   6 6   9 9   12 12}
456 do_execsql_test 4.5.18.1 {
457   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
458   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
459   FROM ttt ORDER BY a
460 } {1 1   2 2   3 3   2 1   3 2   4 3   3 1   4 2   5 3}
462 do_execsql_test 4.5.18.2 {
463   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
464          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
465   FROM ttt ORDER BY a
466 } {1 6   2 9   3 12   3 6   5 9   7 12   6 6   9 9   12 12}
468 do_execsql_test 4.5.19.1 {
469   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
470   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW)
471   FROM ttt ORDER BY a
472 } {1 1   2 2   3 3   2 2   3 3   4 4   3 3   4 4   5 5}
474 do_execsql_test 4.5.19.2 {
475   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
476          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW)
477   FROM ttt ORDER BY a
478 } {1 1   2 2   3 3   3 2   5 3   7 4   6 3   9 4   12 5}
480 do_execsql_test 4.5.20.1 {
481   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
482   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
483   FROM ttt ORDER BY a
484 } {1 1   2 2   3 3   2 2   3 3   4 4   3 3   4 4   5 5}
486 do_execsql_test 4.5.20.2 {
487   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
488          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
489   FROM ttt ORDER BY a
490 } {1 6   2 9   3 12   3 5   5 7   7 9   6 3   9 4   12 5}
492 do_execsql_test 4.5.21.1 {
493   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), 
494   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
495   FROM ttt ORDER BY a
496 } {3 1   4 2   5 3   3 1   4 2   5 3   3 1   4 2   5 3}
498 do_execsql_test 4.5.21.2 {
499   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), 
500          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
501   FROM ttt ORDER BY a
502 } {6 1   9 2   12 3   6 3   9 5   12 7   6 6   9 9   12 12}
504 do_execsql_test 4.5.22.1 {
505   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), 
506   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
507   FROM ttt ORDER BY a
508 } {3 1   4 2   5 3   3 1   4 2   5 3   3 1   4 2   5 3}
510 do_execsql_test 4.5.22.2 {
511   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), 
512          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
513   FROM ttt ORDER BY a
514 } {6 6   9 9   12 12   6 6   9 9   12 12   6 6   9 9   12 12}
516 do_execsql_test 4.5.23.1 {
517   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), 
518   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW)
519   FROM ttt ORDER BY a
520 } {3 1   4 2   5 3   3 2   4 3   5 4   3 3   4 4   5 5}
522 do_execsql_test 4.5.23.2 {
523   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), 
524          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW)
525   FROM ttt ORDER BY a
526 } {6 1   9 2   12 3   6 2   9 3   12 4   6 3   9 4   12 5}
528 do_execsql_test 4.5.24.1 {
529   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), 
530   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
531   FROM ttt ORDER BY a
532 } {3 1   4 2   5 3   3 2   4 3   5 4   3 3   4 4   5 5}
534 do_execsql_test 4.5.24.2 {
535   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), 
536          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
537   FROM ttt ORDER BY a
538 } {6 6   9 9   12 12   6 5   9 7   12 9   6 3   9 4   12 5}
540 do_execsql_test 4.5.25.1 {
541   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), 
542   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
543   FROM ttt ORDER BY a
544 } {1 1   2 2   3 3   2 1   3 2   4 3   3 1   4 2   5 3}
546 do_execsql_test 4.5.25.2 {
547   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), 
548          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
549   FROM ttt ORDER BY a
550 } {1 1   2 2   3 3   2 3   3 5   4 7   3 6   4 9   5 12}
552 do_execsql_test 4.5.26.1 {
553   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), 
554   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
555   FROM ttt ORDER BY a
556 } {1 1   2 2   3 3   2 1   3 2   4 3   3 1   4 2   5 3}
558 do_execsql_test 4.5.26.2 {
559   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), 
560          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
561   FROM ttt ORDER BY a
562 } {1 6   2 9   3 12   2 6   3 9   4 12   3 6   4 9   5 12}
564 do_execsql_test 4.5.27.1 {
565   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), 
566   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW)
567   FROM ttt ORDER BY a
568 } {1 1   2 2   3 3   2 2   3 3   4 4   3 3   4 4   5 5}
570 do_execsql_test 4.5.27.2 {
571   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), 
572          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW)
573   FROM ttt ORDER BY a
574 } {1 1   2 2   3 3   2 2   3 3   4 4   3 3   4 4   5 5}
576 do_execsql_test 4.5.28.1 {
577   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), 
578   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
579   FROM ttt ORDER BY a
580 } {1 1   2 2   3 3   2 2   3 3   4 4   3 3   4 4   5 5}
582 do_execsql_test 4.5.28.2 {
583   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), 
584          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
585   FROM ttt ORDER BY a
586 } {1 6   2 9   3 12   2 5   3 7   4 9   3 3   4 4   5 5}
588 do_execsql_test 4.5.29.1 {
589   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), 
590   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
591   FROM ttt ORDER BY a
592 } {3 1   4 2   5 3   3 1   4 2   5 3   3 1   4 2   5 3}
594 do_execsql_test 4.5.29.2 {
595   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), 
596          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
597   FROM ttt ORDER BY a
598 } {6 1   9 2   12 3   5 3   7 5   9 7   3 6   4 9   5 12}
600 do_execsql_test 4.5.30.1 {
601   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), 
602   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
603   FROM ttt ORDER BY a
604 } {3 1   4 2   5 3   3 1   4 2   5 3   3 1   4 2   5 3}
606 do_execsql_test 4.5.30.2 {
607   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), 
608          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
609   FROM ttt ORDER BY a
610 } {6 6   9 9   12 12   5 6   7 9   9 12   3 6   4 9   5 12}
612 do_execsql_test 4.5.31.1 {
613   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), 
614   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW)
615   FROM ttt ORDER BY a
616 } {3 1   4 2   5 3   3 2   4 3   5 4   3 3   4 4   5 5}
618 do_execsql_test 4.5.31.2 {
619   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), 
620          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW)
621   FROM ttt ORDER BY a
622 } {6 1   9 2   12 3   5 2   7 3   9 4   3 3   4 4   5 5}
624 do_execsql_test 4.5.32.1 {
625   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), 
626   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
627   FROM ttt ORDER BY a
628 } {3 1   4 2   5 3   3 2   4 3   5 4   3 3   4 4   5 5}
630 do_execsql_test 4.5.32.2 {
631   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), 
632          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
633   FROM ttt ORDER BY a
634 } {6 6   9 9   12 12   5 5   7 7   9 9   3 3   4 4   5 5}
636 do_execsql_test 4.5.33.1 {
637   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), 
638   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING)
639   FROM ttt ORDER BY a
640 } {2 1   3 2   4 3   3 1   4 2   5 3   3 1   4 2   5 3}
642 do_execsql_test 4.5.33.2 {
643   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), 
644          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING)
645   FROM ttt ORDER BY a
646 } {3 3   5 5   7 7   6 6   9 9   12 12   6 6   9 9   12 12}
648 do_execsql_test 4.5.34.1 {
649   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), 
650   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING)
651   FROM ttt ORDER BY a
652 } {2 1   3 2   4 3   3 1   4 2   5 3   3 1   4 2   5 3}
654 do_execsql_test 4.5.34.2 {
655   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), 
656          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING)
657   FROM ttt ORDER BY a
658 } {3 6   5 9   7 12   6 6   9 9   12 12   6 6   9 9   12 12}
660 do_execsql_test 4.5.35.1 {
661   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), 
662   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
663   FROM ttt ORDER BY a
664 } {2 {}   3 {}   4 {}   3 1   4 2   5 3   3 2   4 3   5 4}
666 do_execsql_test 4.5.35.2 {
667   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), 
668          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
669   FROM ttt ORDER BY a
670 } {3 {}   5 {}   7 {}   6 1   9 2   12 3   6 2   9 3   12 4}
672 do_execsql_test 4.5.36.1 {
673   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), 
674   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING)
675   FROM ttt ORDER BY a
676 } {2 {}   3 {}   4 {}   3 {}   4 {}   5 {}   3 {}   4 {}   5 {}}
678 do_execsql_test 4.5.36.2 {
679   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), 
680          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING)
681   FROM ttt ORDER BY a
682 } {3 {}   5 {}   7 {}   6 {}   9 {}   12 {}   6 {}   9 {}   12 {}}
684 do_execsql_test 4.5.37.1 {
685   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), 
686   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING)
687   FROM ttt ORDER BY a
688 } {2 2   3 3   4 4   3 3   4 4   5 5   3 {}   4 {}   5 {}}
690 do_execsql_test 4.5.37.2 {
691   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), 
692          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING)
693   FROM ttt ORDER BY a
694 } {3 5   5 7   7 9   6 3   9 4   12 5   6 {}   9 {}   12 {}}
696 do_execsql_test 4.5.38.1 {
697   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), 
698   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING)
699   FROM ttt ORDER BY a
700 } {3 1   4 2   5 3   3 1   4 2   5 3   3 1   4 2   5 3}
702 do_execsql_test 4.5.38.2 {
703   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), 
704          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING)
705   FROM ttt ORDER BY a
706 } {6 3   9 5   12 7   6 6   9 9   12 12   6 6   9 9   12 12}
708 do_execsql_test 4.5.39.1 {
709   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), 
710   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING)
711   FROM ttt ORDER BY a
712 } {3 1   4 2   5 3   3 1   4 2   5 3   3 1   4 2   5 3}
714 do_execsql_test 4.5.39.2 {
715   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), 
716          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING)
717   FROM ttt ORDER BY a
718 } {6 6   9 9   12 12   6 6   9 9   12 12   6 6   9 9   12 12}
720 do_execsql_test 4.5.40.1 {
721   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), 
722   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
723   FROM ttt ORDER BY a
724 } {3 {}   4 {}   5 {}   3 1   4 2   5 3   3 2   4 3   5 4}
726 do_execsql_test 4.5.40.2 {
727   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), 
728          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
729   FROM ttt ORDER BY a
730 } {6 {}   9 {}   12 {}   6 1   9 2   12 3   6 2   9 3   12 4}
732 do_execsql_test 4.5.41.1 {
733   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), 
734   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING)
735   FROM ttt ORDER BY a
736 } {3 {}   4 {}   5 {}   3 {}   4 {}   5 {}   3 {}   4 {}   5 {}}
738 do_execsql_test 4.5.41.2 {
739   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), 
740          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING)
741   FROM ttt ORDER BY a
742 } {6 {}   9 {}   12 {}   6 {}   9 {}   12 {}   6 {}   9 {}   12 {}}
744 do_execsql_test 4.5.42.1 {
745   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), 
746   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING)
747   FROM ttt ORDER BY a
748 } {3 2   4 3   5 4   3 3   4 4   5 5   3 {}   4 {}   5 {}}
750 do_execsql_test 4.5.42.2 {
751   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), 
752          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING)
753   FROM ttt ORDER BY a
754 } {6 5   9 7   12 9   6 3   9 4   12 5   6 {}   9 {}   12 {}}
756 do_execsql_test 4.5.43.1 {
757   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), 
758   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING)
759   FROM ttt ORDER BY a
760 } {{} 1   {} 2   {} 3   1 1   2 2   3 3   2 1   3 2   4 3}
762 do_execsql_test 4.5.43.2 {
763   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), 
764          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING)
765   FROM ttt ORDER BY a
766 } {{} 3   {} 5   {} 7   1 6   2 9   3 12   2 6   3 9   4 12}
768 do_execsql_test 4.5.44.1 {
769   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), 
770   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING)
771   FROM ttt ORDER BY a
772 } {{} 1   {} 2   {} 3   1 1   2 2   3 3   2 1   3 2   4 3}
774 do_execsql_test 4.5.44.2 {
775   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), 
776          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING)
777   FROM ttt ORDER BY a
778 } {{} 6   {} 9   {} 12   1 6   2 9   3 12   2 6   3 9   4 12}
780 do_execsql_test 4.5.45.1 {
781   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), 
782   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
783   FROM ttt ORDER BY a
784 } {{} {}   {} {}   {} {}   1 1   2 2   3 3   2 2   3 3   4 4}
786 do_execsql_test 4.5.45.2 {
787   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), 
788          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
789   FROM ttt ORDER BY a
790 } {{} {}   {} {}   {} {}   1 1   2 2   3 3   2 2   3 3   4 4}
792 do_execsql_test 4.5.46.1 {
793   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), 
794   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING)
795   FROM ttt ORDER BY a
796 } {{} {}   {} {}   {} {}   1 {}   2 {}   3 {}   2 {}   3 {}   4 {}}
798 do_execsql_test 4.5.46.2 {
799   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), 
800          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING)
801   FROM ttt ORDER BY a
802 } {{} {}   {} {}   {} {}   1 {}   2 {}   3 {}   2 {}   3 {}   4 {}}
804 do_execsql_test 4.5.47.1 {
805   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), 
806   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING)
807   FROM ttt ORDER BY a
808 } {{} 2   {} 3   {} 4   1 3   2 4   3 5   2 {}   3 {}   4 {}}
810 do_execsql_test 4.5.47.2 {
811   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), 
812          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING)
813   FROM ttt ORDER BY a
814 } {{} 5   {} 7   {} 9   1 3   2 4   3 5   2 {}   3 {}   4 {}}
816 do_execsql_test 4.5.48.1 {
817   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), 
818   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING)
819   FROM ttt ORDER BY a
820 } {{} 1   {} 2   {} 3   {} 1   {} 2   {} 3   {} 1   {} 2   {} 3}
822 do_execsql_test 4.5.48.2 {
823   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), 
824          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING)
825   FROM ttt ORDER BY a
826 } {{} 3   {} 5   {} 7   {} 6   {} 9   {} 12   {} 6   {} 9   {} 12}
828 do_execsql_test 4.5.49.1 {
829   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), 
830   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING)
831   FROM ttt ORDER BY a
832 } {{} 1   {} 2   {} 3   {} 1   {} 2   {} 3   {} 1   {} 2   {} 3}
834 do_execsql_test 4.5.49.2 {
835   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), 
836          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING)
837   FROM ttt ORDER BY a
838 } {{} 6   {} 9   {} 12   {} 6   {} 9   {} 12   {} 6   {} 9   {} 12}
840 do_execsql_test 4.5.50.1 {
841   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), 
842   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
843   FROM ttt ORDER BY a
844 } {{} {}   {} {}   {} {}   {} 1   {} 2   {} 3   {} 2   {} 3   {} 4}
846 do_execsql_test 4.5.50.2 {
847   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), 
848          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
849   FROM ttt ORDER BY a
850 } {{} {}   {} {}   {} {}   {} 1   {} 2   {} 3   {} 2   {} 3   {} 4}
852 do_execsql_test 4.5.51.1 {
853   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), 
854   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING)
855   FROM ttt ORDER BY a
856 } {{} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}}
858 do_execsql_test 4.5.51.2 {
859   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), 
860          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING)
861   FROM ttt ORDER BY a
862 } {{} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}}
864 do_execsql_test 4.5.52.1 {
865   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), 
866   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING)
867   FROM ttt ORDER BY a
868 } {{} 2   {} 3   {} 4   {} 3   {} 4   {} 5   {} {}   {} {}   {} {}}
870 do_execsql_test 4.5.52.2 {
871   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), 
872          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING)
873   FROM ttt ORDER BY a
874 } {{} 5   {} 7   {} 9   {} 3   {} 4   {} 5   {} {}   {} {}   {} {}}
876 do_execsql_test 4.5.53.1 {
877   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), 
878   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING)
879   FROM ttt ORDER BY a
880 } {3 1   4 2   5 3   3 1   4 2   5 3   {} 1   {} 2   {} 3}
882 do_execsql_test 4.5.53.2 {
883   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), 
884          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING)
885   FROM ttt ORDER BY a
886 } {5 3   7 5   9 7   3 6   4 9   5 12   {} 6   {} 9   {} 12}
888 do_execsql_test 4.5.54.1 {
889   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), 
890   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING)
891   FROM ttt ORDER BY a
892 } {3 1   4 2   5 3   3 1   4 2   5 3   {} 1   {} 2   {} 3}
894 do_execsql_test 4.5.54.2 {
895   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), 
896          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING)
897   FROM ttt ORDER BY a
898 } {5 6   7 9   9 12   3 6   4 9   5 12   {} 6   {} 9   {} 12}
900 do_execsql_test 4.5.55.1 {
901   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), 
902   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
903   FROM ttt ORDER BY a
904 } {3 {}   4 {}   5 {}   3 1   4 2   5 3   {} 2   {} 3   {} 4}
906 do_execsql_test 4.5.55.2 {
907   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), 
908          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
909   FROM ttt ORDER BY a
910 } {5 {}   7 {}   9 {}   3 1   4 2   5 3   {} 2   {} 3   {} 4}
912 do_execsql_test 4.5.56.1 {
913   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), 
914   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING)
915   FROM ttt ORDER BY a
916 } {3 {}   4 {}   5 {}   3 {}   4 {}   5 {}   {} {}   {} {}   {} {}}
918 do_execsql_test 4.5.56.2 {
919   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), 
920          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING)
921   FROM ttt ORDER BY a
922 } {5 {}   7 {}   9 {}   3 {}   4 {}   5 {}   {} {}   {} {}   {} {}}
924 do_execsql_test 4.5.57.1 {
925   SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), 
926   min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING)
927   FROM ttt ORDER BY a
928 } {3 2   4 3   5 4   3 3   4 4   5 5   {} {}   {} {}   {} {}}
930 do_execsql_test 4.5.57.2 {
931   SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), 
932          sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING)
933   FROM ttt ORDER BY a
934 } {5 5   7 7   9 9   3 3   4 4   5 5   {} {}   {} {}   {} {}}
936 do_execsql_test 4.5.58.1 {
937   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
938   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
939   FROM ttt ORDER BY a
940 } {1 1   2 2   3 3   2 1   3 2   4 3   3 1   4 2   5 3}
942 do_execsql_test 4.5.58.2 {
943   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
944          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
945   FROM ttt ORDER BY a
946 } {1 1   2 2   3 3   3 3   5 5   7 7   6 6   9 9   12 12}
948 do_execsql_test 4.5.59.1 {
949   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
950   min(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
951   FROM ttt ORDER BY a
952 } {1 1   2 2   3 3   2 2   3 3   4 4   3 3   4 4   5 5}
954 do_execsql_test 4.5.59.2 {
955   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
956          sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
957   FROM ttt ORDER BY a
958 } {1 6   2 9   3 12   3 5   5 7   7 9   6 3   9 4   12 5}
960 do_execsql_test 4.5.60.1 {
961   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
962   min(c) OVER (PARTITION BY b  RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
963   FROM ttt ORDER BY a
964 } {1 1   2 2   3 3   2 1   3 2   4 3   3 1   4 2   5 3}
966 do_execsql_test 4.5.60.2 {
967   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
968          sum(c) OVER (PARTITION BY b  RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
969   FROM ttt ORDER BY a
970 } {1 6   2 9   3 12   3 6   5 9   7 12   6 6   9 9   12 12}
972 do_execsql_test 4.5.61.1 {
973   SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
974   min(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
975   FROM ttt ORDER BY a
976 } {1 1   2 2   3 3   2 1   3 2   4 3   3 1   4 2   5 3}
978 do_execsql_test 4.5.61.2 {
979   SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
980          sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
981   FROM ttt ORDER BY a
982 } {1 1   2 2   3 3   3 3   5 5   7 7   6 6   9 9   12 12}
984 do_execsql_test 4.5.62.1 {
985   SELECT max(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
986   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
987   FROM ttt ORDER BY a
988 } {3 1   4 2   5 3   3 1   4 2   5 3   3 1   4 2   5 3}
990 do_execsql_test 4.5.62.2 {
991   SELECT sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
992          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
993   FROM ttt ORDER BY a
994 } {6 1   9 2   12 3   5 3   7 5   9 7   3 6   4 9   5 12}
996 do_execsql_test 4.5.63.1 {
997   SELECT max(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
998   min(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
999   FROM ttt ORDER BY a
1000 } {3 1   4 2   5 3   3 2   4 3   5 4   3 3   4 4   5 5}
1002 do_execsql_test 4.5.63.2 {
1003   SELECT sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1004          sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1005   FROM ttt ORDER BY a
1006 } {6 6   9 9   12 12   5 5   7 7   9 9   3 3   4 4   5 5}
1008 do_execsql_test 4.5.64.1 {
1009   SELECT max(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1010   min(c) OVER (PARTITION BY b  RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1011   FROM ttt ORDER BY a
1012 } {3 1   4 2   5 3   3 1   4 2   5 3   3 1   4 2   5 3}
1014 do_execsql_test 4.5.64.2 {
1015   SELECT sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1016          sum(c) OVER (PARTITION BY b  RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1017   FROM ttt ORDER BY a
1018 } {6 6   9 9   12 12   5 6   7 9   9 12   3 6   4 9   5 12}
1020 do_execsql_test 4.5.65.1 {
1021   SELECT max(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1022   min(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1023   FROM ttt ORDER BY a
1024 } {3 1   4 2   5 3   3 1   4 2   5 3   3 1   4 2   5 3}
1026 do_execsql_test 4.5.65.2 {
1027   SELECT sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1028          sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1029   FROM ttt ORDER BY a
1030 } {6 1   9 2   12 3   5 3   7 5   9 7   3 6   4 9   5 12}
1032 do_execsql_test 4.5.66.1 {
1033   SELECT max(c) OVER (PARTITION BY b  RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1034   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1035   FROM ttt ORDER BY a
1036 } {3 1   4 2   5 3   3 1   4 2   5 3   3 1   4 2   5 3}
1038 do_execsql_test 4.5.66.2 {
1039   SELECT sum(c) OVER (PARTITION BY b  RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1040          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1041   FROM ttt ORDER BY a
1042 } {6 1   9 2   12 3   6 3   9 5   12 7   6 6   9 9   12 12}
1044 do_execsql_test 4.5.67.1 {
1045   SELECT max(c) OVER (PARTITION BY b  RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1046   min(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1047   FROM ttt ORDER BY a
1048 } {3 1   4 2   5 3   3 2   4 3   5 4   3 3   4 4   5 5}
1050 do_execsql_test 4.5.67.2 {
1051   SELECT sum(c) OVER (PARTITION BY b  RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1052          sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1053   FROM ttt ORDER BY a
1054 } {6 6   9 9   12 12   6 5   9 7   12 9   6 3   9 4   12 5}
1056 do_execsql_test 4.5.68.1 {
1057   SELECT max(c) OVER (PARTITION BY b  RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1058   min(c) OVER (PARTITION BY b  RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1059   FROM ttt ORDER BY a
1060 } {3 1   4 2   5 3   3 1   4 2   5 3   3 1   4 2   5 3}
1062 do_execsql_test 4.5.68.2 {
1063   SELECT sum(c) OVER (PARTITION BY b  RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1064          sum(c) OVER (PARTITION BY b  RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1065   FROM ttt ORDER BY a
1066 } {6 6   9 9   12 12   6 6   9 9   12 12   6 6   9 9   12 12}
1068 do_execsql_test 4.5.69.1 {
1069   SELECT max(c) OVER (PARTITION BY b  RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1070   min(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1071   FROM ttt ORDER BY a
1072 } {3 1   4 2   5 3   3 1   4 2   5 3   3 1   4 2   5 3}
1074 do_execsql_test 4.5.69.2 {
1075   SELECT sum(c) OVER (PARTITION BY b  RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1076          sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1077   FROM ttt ORDER BY a
1078 } {6 1   9 2   12 3   6 3   9 5   12 7   6 6   9 9   12 12}
1080 do_execsql_test 4.5.70.1 {
1081   SELECT max(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1082   min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1083   FROM ttt ORDER BY a
1084 } {1 1   2 2   3 3   2 1   3 2   4 3   3 1   4 2   5 3}
1086 do_execsql_test 4.5.70.2 {
1087   SELECT sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1088          sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1089   FROM ttt ORDER BY a
1090 } {1 1   2 2   3 3   3 3   5 5   7 7   6 6   9 9   12 12}
1092 do_execsql_test 4.5.71.1 {
1093   SELECT max(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1094   min(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1095   FROM ttt ORDER BY a
1096 } {1 1   2 2   3 3   2 2   3 3   4 4   3 3   4 4   5 5}
1098 do_execsql_test 4.5.71.2 {
1099   SELECT sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1100          sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1101   FROM ttt ORDER BY a
1102 } {1 6   2 9   3 12   3 5   5 7   7 9   6 3   9 4   12 5}
1104 do_execsql_test 4.5.72.1 {
1105   SELECT max(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1106   min(c) OVER (PARTITION BY b  RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1107   FROM ttt ORDER BY a
1108 } {1 1   2 2   3 3   2 1   3 2   4 3   3 1   4 2   5 3}
1110 do_execsql_test 4.5.72.2 {
1111   SELECT sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1112          sum(c) OVER (PARTITION BY b  RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1113   FROM ttt ORDER BY a
1114 } {1 6   2 9   3 12   3 6   5 9   7 12   6 6   9 9   12 12}
1116 do_execsql_test 4.5.73.1 {
1117   SELECT max(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1118   min(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1119   FROM ttt ORDER BY a
1120 } {1 1   2 2   3 3   2 1   3 2   4 3   3 1   4 2   5 3}
1122 do_execsql_test 4.5.73.2 {
1123   SELECT sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 
1124          sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1125   FROM ttt ORDER BY a
1126 } {1 1   2 2   3 3   3 3   5 5   7 7   6 6   9 9   12 12}
1128 #==========================================================================
1130 do_execsql_test 7.0 {
1131   DROP TABLE IF EXISTS t1;
1132   CREATE TABLE t1(x INTEGER, y INTEGER);
1133   INSERT INTO t1 VALUES(1, 2);
1134   INSERT INTO t1 VALUES(3, 4);
1135   INSERT INTO t1 VALUES(5, 6);
1136   INSERT INTO t1 VALUES(7, 8);
1137   INSERT INTO t1 VALUES(9, 10);
1138 } {}
1140 do_execsql_test 7.1 {
1141   SELECT lead(y) OVER win FROM t1
1142   WINDOW win AS (ORDER BY x)
1143 } {4   6   8   10   {}}
1145 do_execsql_test 7.2 {
1146   SELECT lead(y, 2) OVER win FROM t1
1147   WINDOW win AS (ORDER BY x)
1148 } {6   8   10   {}   {}}
1150 do_execsql_test 7.3 {
1151   SELECT lead(y, 3, -1) OVER win FROM t1
1152   WINDOW win AS (ORDER BY x)
1153 } {8   10   -1   -1   -1}
1155 do_execsql_test 7.4 {
1156   SELECT 
1157     lead(y) OVER win, lead(y) OVER win
1158   FROM t1
1159   WINDOW win AS (ORDER BY x)
1160 } {4 4   6 6   8 8   10 10   {} {}}
1162 do_execsql_test 7.5 {
1163   SELECT 
1164     lead(y) OVER win, 
1165     lead(y, 2) OVER win, 
1166     lead(y, 3, -1) OVER win
1167   FROM t1
1168   WINDOW win AS (ORDER BY x)
1169 } {4 6 8   6 8 10   8 10 -1   10 {} -1   {} {} -1}
1171 #==========================================================================
1173 do_execsql_test 8.0 {
1174   DROP TABLE IF EXISTS t1;
1175   CREATE TABLE t1(a INTEGER, b INTEGER, c INTEGER, d INTEGER);
1176   INSERT INTO t1 VALUES(1, 2, 3, 4);
1177   INSERT INTO t1 VALUES(5, 6, 7, 8);
1178   INSERT INTO t1 VALUES(9, 10, 11, 12);
1179 } {}
1181 do_execsql_test 8.1 {
1182   SELECT row_number() OVER win,
1183          nth_value(d,2) OVER win,
1184          lead(d) OVER win
1185   FROM t1
1186   WINDOW win AS (ORDER BY a)
1187 } {1 {} 8   2 8 12   3 8 {}}
1189 do_execsql_test 8.2 {
1190   SELECT row_number() OVER win,
1191            rank() OVER win,
1192            dense_rank() OVER win,
1193            ntile(2) OVER win,
1194            first_value(d) OVER win,
1195            last_value(d) OVER win,
1196            nth_value(d,2) OVER win,
1197            lead(d) OVER win,
1198            lag(d) OVER win,
1199            max(d) OVER win,
1200            min(d) OVER win
1201     FROM t1
1202     WINDOW win AS (ORDER BY a)
1203 } {1 1 1 1 4 4 {} 8 {} 4 4   2 2 2 1 4 8 8 12 4 8 4   3 3 3 2 4 12 8 {} 8 12 4}
1205 #==========================================================================
1207 do_execsql_test 9.0 {
1208   DROP TABLE IF EXISTS t2;
1209   CREATE TABLE t2(x INTEGER);
1210   INSERT INTO t2 VALUES(1), (1), (1), (4), (4), (6), (7);
1211 } {}
1213 do_execsql_test 9.1 {
1214   SELECT rank() OVER () FROM t2
1215 } {1   1   1   1   1   1   1}
1217 do_execsql_test 9.2 {
1218   SELECT dense_rank() OVER (PARTITION BY x) FROM t2
1219 } {1   1   1   1   1   1   1}
1222 do_test 9.3 {
1223   set myres {}
1224   foreach r [db eval {SELECT x, percent_rank() OVER (PARTITION BY x ORDER BY x) FROM t2}] {
1225     lappend myres [format %.4f [set r]]
1226   }
1227   set res2 {1.0000 0.0000 1.0000 0.0000 1.0000 0.0000 4.0000 0.0000 4.0000 0.0000 6.0000 0.0000 7.0000 0.0000}
1228   set i 0
1229   foreach r [set myres] r2 [set res2] {
1230     if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} {
1231       error "list element [set i] does not match: got=[set r] expected=[set r2]"
1232     }
1233     incr i
1234   }
1235   set {} {}
1236 } {}
1238 do_execsql_test 9.4 {
1239   SELECT x, rank() OVER (ORDER BY x) FROM t2 ORDER BY 1,2
1240 } {1 1   1 1   1 1   4 4   4 4   6 6   7 7}
1242 do_execsql_test 9.5 {
1243   SELECT DISTINCT x, rank() OVER (ORDER BY x) FROM t2 ORDER BY 1,2
1244 } {1 1   4 4   6 6   7 7}
1247 do_test 9.6 {
1248   set myres {}
1249   foreach r [db eval {SELECT percent_rank() OVER () FROM t1}] {
1250     lappend myres [format %.4f [set r]]
1251   }
1252   set res2 {0.0000 0.0000 0.0000}
1253   set i 0
1254   foreach r [set myres] r2 [set res2] {
1255     if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} {
1256       error "list element [set i] does not match: got=[set r] expected=[set r2]"
1257     }
1258     incr i
1259   }
1260   set {} {}
1261 } {}
1264 do_test 9.7 {
1265   set myres {}
1266   foreach r [db eval {SELECT cume_dist() OVER () FROM t1}] {
1267     lappend myres [format %.4f [set r]]
1268   }
1269   set res2 {1.0000 1.0000 1.0000}
1270   set i 0
1271   foreach r [set myres] r2 [set res2] {
1272     if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} {
1273       error "list element [set i] does not match: got=[set r] expected=[set r2]"
1274     }
1275     incr i
1276   }
1277   set {} {}
1278 } {}
1280 do_execsql_test 10.0 {
1281   DROP TABLE IF EXISTS t7;
1282   CREATE TABLE t7(id INTEGER PRIMARY KEY, a INTEGER, b INTEGER);
1283   INSERT INTO t7(id, a, b) VALUES
1284     (1, 1, 2), (2, 1, NULL), (3, 1, 4),
1285     (4, 3, NULL), (5, 3, 8), (6, 3, 1);
1286 } {}
1288 do_execsql_test 10.1 {
1289   SELECT id, min(b) OVER (PARTITION BY a ORDER BY id) FROM t7;
1290 } {1 2   2 2   3 2   4 {}   5 8   6 1}
1292 do_execsql_test 10.2 {
1293   SELECT id, lead(b, -1) OVER (PARTITION BY a ORDER BY id) FROM t7;
1294 } {1 {}   2 2   3 {}   4 {}   5 {}   6 8}
1296 do_execsql_test 10.3 {
1297   SELECT id, lag(b, -1) OVER (PARTITION BY a ORDER BY id) FROM t7;
1298 } {1 {}   2 4   3 {}   4 8   5 1   6 {}}
1300 do_execsql_test 11.0 {
1301   DROP VIEW IF EXISTS v8;
1302   DROP TABLE IF EXISTS t8;
1303   CREATE TABLE t8(t INT, total INT);
1304   INSERT INTO t8 VALUES(0,2);
1305   INSERT INTO t8 VALUES(5,1);
1306   INSERT INTO t8 VALUES(10,1);
1307 } {}
1309 do_execsql_test 11.1 {
1310   SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8;
1311 } {0   1   2}
1313 do_execsql_test 11.2 {
1314   CREATE VIEW v8 AS SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8;
1315 } {}
1317 do_execsql_test 11.3 {
1318   SELECT * FROM v8;
1319 } {0   1   2}
1321 do_execsql_test 11.4 {
1322   SELECT * FROM (
1323     SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8
1324   ) sub;
1325 } {0   1   2}
1327 do_execsql_test 11.5 {
1328   SELECT sum( min(t) ) OVER () FROM t8 GROUP BY total;
1329 } {5   5}
1331 do_execsql_test 11.5 {
1332   SELECT sum( max(t) ) OVER () FROM t8 GROUP BY total;
1333 } {10   10}
1335 do_execsql_test 11.7 {
1336   SELECT sum( min(t) ) OVER () FROM t8;
1337 } {0}
1339 do_execsql_test 11.8 {
1340   SELECT sum( max(t) ) OVER () FROM t8;
1341 } {10}
1343 do_execsql_test 12.0 {
1344   DROP TABLE IF EXISTS t2;
1345   CREATE TABLE t2(a INTEGER);
1346   INSERT INTO t2 VALUES(1), (2), (3);
1347 } {}
1349 do_execsql_test 12.1 {
1350   SELECT (SELECT min(a) OVER ()) FROM t2
1351 } {1   2   3}
1354 do_test 12.2 {
1355   set myres {}
1356   foreach r [db eval {SELECT (SELECT avg(a)) FROM t2 ORDER BY 1}] {
1357     lappend myres [format %.4f [set r]]
1358   }
1359   set res2 {2.0000}
1360   set i 0
1361   foreach r [set myres] r2 [set res2] {
1362     if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} {
1363       error "list element [set i] does not match: got=[set r] expected=[set r2]"
1364     }
1365     incr i
1366   }
1367   set {} {}
1368 } {}
1371 do_test 12.3 {
1372   set myres {}
1373   foreach r [db eval {SELECT 
1374     (SELECT avg(a) UNION SELECT min(a) OVER ()) 
1375   FROM t2 GROUP BY a
1376   ORDER BY 1}] {
1377     lappend myres [format %.4f [set r]]
1378   }
1379   set res2 {1.0000 2.0000 3.0000}
1380   set i 0
1381   foreach r [set myres] r2 [set res2] {
1382     if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} {
1383       error "list element [set i] does not match: got=[set r] expected=[set r2]"
1384     }
1385     incr i
1386   }
1387   set {} {}
1388 } {}
1390 finish_test