xref: /sqlite-3.40.0/test/window4.test (revision 74bbd37d)
1# 2018 June 04
2#
3# The author disclaims copyright to this source code.  In place of
4# a legal notice, here is a blessing:
5#
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.
9#
10#***********************************************************************
11# This file implements regression tests for SQLite library.
12#
13
14####################################################
15# DO NOT EDIT! THIS FILE IS AUTOMATICALLY GENERATED!
16####################################################
17
18set testdir [file dirname $argv0]
19source $testdir/tester.tcl
20set testprefix window4
21
22ifcapable !windowfunc { finish_test ; return }
23do_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} {}
29
30do_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}
33
34do_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}
37
38do_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}
41
42do_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}
45
46do_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}
49
50do_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}
53
54do_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}
57
58do_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}
61
62do_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}
65
66do_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}
69
70do_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}
73
74do_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}
77
78do_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}
81
82do_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}
85
86do_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}
89
90do_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}
93
94do_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}
97
98do_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}
101
102do_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}
105
106do_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} {}
120
121do_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}
124
125do_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 {}}
128
129do_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 {}}
132
133do_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}
136
137do_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}
140
141do_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}
144
145do_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}
148
149do_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}
155
156do_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} {}
165
166do_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}
169
170do_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}
173
174do_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}
180
181do_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}
185
186do_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 {}}
190
191do_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}
195
196do_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}
200
201do_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 {}}
205
206do_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 {}}
210
211do_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}
215
216#==========================================================================
217
218do_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);
224
225  INSERT INTO ttt VALUES(4, 1, 2);
226  INSERT INTO ttt VALUES(5, 2, 3);
227  INSERT INTO ttt VALUES(6, 3, 4);
228
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} {}
233
234do_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}
237
238do_execsql_test 4.2 {
239  SELECT max(b) OVER (ORDER BY max(c)) FROM ttt GROUP BY b;
240} {1   2   3}
241
242do_execsql_test 4.3 {
243  SELECT abs(max(b) OVER (ORDER BY b)) FROM ttt GROUP BY b;
244} {1   2   3}
245
246do_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}
251
252do_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}
257
258do_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}
263
264do_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}
269
270do_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}
275
276do_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}
281
282do_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}
287
288do_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}
293
294do_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}
299
300do_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}
305
306do_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}
311
312do_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}
317
318do_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}
323
324do_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}
329
330do_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}
335
336do_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}
341
342do_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}
347
348do_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}
353
354do_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}
359
360do_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}
365
366do_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}
371
372do_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}
377
378do_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}
383
384do_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}
389
390do_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}
395
396do_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}
401
402do_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}
407
408do_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}
413
414do_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}
419
420do_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}
425
426do_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}
431
432do_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}
437
438do_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}
443
444do_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}
449
450do_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}
455
456do_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}
461
462do_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}
467
468do_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}
473
474do_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}
479
480do_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}
485
486do_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}
491
492do_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}
497
498do_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}
503
504do_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}
509
510do_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}
515
516do_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}
521
522do_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}
527
528do_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}
533
534do_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}
539
540do_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}
545
546do_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}
551
552do_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}
557
558do_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}
563
564do_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}
569
570do_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}
575
576do_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}
581
582do_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}
587
588do_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}
593
594do_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}
599
600do_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}
605
606do_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}
611
612do_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}
617
618do_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}
623
624do_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}
629
630do_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}
635
636do_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}
641
642do_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}
647
648do_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}
653
654do_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}
659
660do_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}
665
666do_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}
671
672do_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 {}}
677
678do_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 {}}
683
684do_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 {}}
689
690do_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 {}}
695
696do_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}
701
702do_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}
707
708do_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}
713
714do_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}
719
720do_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}
725
726do_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}
731
732do_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 {}}
737
738do_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 {}}
743
744do_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 {}}
749
750do_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 {}}
755
756do_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}
761
762do_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}
767
768do_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}
773
774do_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}
779
780do_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}
785
786do_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}
791
792do_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 {}}
797
798do_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 {}}
803
804do_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 {}}
809
810do_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 {}}
815
816do_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}
821
822do_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}
827
828do_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}
833
834do_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}
839
840do_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}
845
846do_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}
851
852do_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} {{} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}}
857
858do_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} {{} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}}
863
864do_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   {} {}   {} {}   {} {}}
869
870do_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   {} {}   {} {}   {} {}}
875
876do_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}
881
882do_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}
887
888do_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}
893
894do_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}
899
900do_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}
905
906do_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}
911
912do_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 {}   {} {}   {} {}   {} {}}
917
918do_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 {}   {} {}   {} {}   {} {}}
923
924do_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   {} {}   {} {}   {} {}}
929
930do_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   {} {}   {} {}   {} {}}
935
936do_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}
941
942do_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}
947
948do_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}
953
954do_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}
959
960do_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}
965
966do_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}
971
972do_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}
977
978do_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}
983
984do_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}
989
990do_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}
995
996do_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}
1001
1002do_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}
1007
1008do_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}
1013
1014do_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}
1019
1020do_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}
1025
1026do_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}
1031
1032do_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}
1037
1038do_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}
1043
1044do_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}
1049
1050do_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}
1055
1056do_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}
1061
1062do_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}
1067
1068do_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}
1073
1074do_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}
1079
1080do_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}
1085
1086do_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}
1091
1092do_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}
1097
1098do_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}
1103
1104do_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}
1109
1110do_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}
1115
1116do_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}
1121
1122do_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}
1127
1128#==========================================================================
1129
1130do_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} {}
1139
1140do_execsql_test 7.1 {
1141  SELECT lead(y) OVER win FROM t1
1142  WINDOW win AS (ORDER BY x)
1143} {4   6   8   10   {}}
1144
1145do_execsql_test 7.2 {
1146  SELECT lead(y, 2) OVER win FROM t1
1147  WINDOW win AS (ORDER BY x)
1148} {6   8   10   {}   {}}
1149
1150do_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}
1154
1155do_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   {} {}}
1161
1162do_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}
1170
1171#==========================================================================
1172
1173do_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} {}
1180
1181do_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 {}}
1188
1189do_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}
1204
1205#==========================================================================
1206
1207do_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} {}
1212
1213do_execsql_test 9.1 {
1214  SELECT rank() OVER () FROM t2
1215} {1   1   1   1   1   1   1}
1216
1217do_execsql_test 9.2 {
1218  SELECT dense_rank() OVER (PARTITION BY x) FROM t2
1219} {1   1   1   1   1   1   1}
1220
1221
1222do_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} {}
1237
1238do_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}
1241
1242do_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}
1245
1246
1247do_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} {}
1262
1263
1264do_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} {}
1279
1280do_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} {}
1287
1288do_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}
1291
1292do_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}
1295
1296do_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 {}}
1299
1300do_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} {}
1308
1309do_execsql_test 11.1 {
1310  SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8;
1311} {0   1   2}
1312
1313do_execsql_test 11.2 {
1314  CREATE VIEW v8 AS SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8;
1315} {}
1316
1317do_execsql_test 11.3 {
1318  SELECT * FROM v8;
1319} {0   1   2}
1320
1321do_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}
1326
1327do_execsql_test 11.5 {
1328  SELECT sum( min(t) ) OVER () FROM t8 GROUP BY total;
1329} {5   5}
1330
1331do_execsql_test 11.5 {
1332  SELECT sum( max(t) ) OVER () FROM t8 GROUP BY total;
1333} {10   10}
1334
1335do_execsql_test 11.7 {
1336  SELECT sum( min(t) ) OVER () FROM t8;
1337} {0}
1338
1339do_execsql_test 11.8 {
1340  SELECT sum( max(t) ) OVER () FROM t8;
1341} {10}
1342
1343do_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} {}
1348
1349do_execsql_test 12.1 {
1350  SELECT (SELECT min(a) OVER ()) FROM t2
1351} {1   2   3}
1352
1353
1354do_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} {}
1369
1370
1371do_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} {}
1389
1390finish_test
1391