xref: /sqlite-3.40.0/test/window2.tcl (revision d8d2fb92)
1b6e9f7a4Sdan# 2018 May 19
2b6e9f7a4Sdan#
3b6e9f7a4Sdan# The author disclaims copyright to this source code.  In place of
4b6e9f7a4Sdan# a legal notice, here is a blessing:
5b6e9f7a4Sdan#
6b6e9f7a4Sdan#    May you do good and not evil.
7b6e9f7a4Sdan#    May you find forgiveness for yourself and forgive others.
8b6e9f7a4Sdan#    May you share freely, never taking more than you give.
9b6e9f7a4Sdan#
10b6e9f7a4Sdan#***********************************************************************
11b6e9f7a4Sdan#
12b6e9f7a4Sdan
13c9a8668aSdansource [file join [file dirname $argv0] pg_common.tcl]
14b6e9f7a4Sdan
15b6e9f7a4Sdan#=========================================================================
16b6e9f7a4Sdan
17b6e9f7a4Sdan
18b6e9f7a4Sdanstart_test window2 "2018 May 19"
19b6e9f7a4Sdan
2067a9b8edSdanifcapable !windowfunc
2167a9b8edSdan
22b6e9f7a4Sdanexecsql_test 1.0 {
23b6e9f7a4Sdan  DROP TABLE IF EXISTS t1;
24b6e9f7a4Sdan  CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c TEXT, d INTEGER);
25b6e9f7a4Sdan  INSERT INTO t1 VALUES(1, 'odd',  'one',   1);
26b6e9f7a4Sdan  INSERT INTO t1 VALUES(2, 'even', 'two',   2);
27b6e9f7a4Sdan  INSERT INTO t1 VALUES(3, 'odd',  'three', 3);
28b6e9f7a4Sdan  INSERT INTO t1 VALUES(4, 'even', 'four',  4);
29b6e9f7a4Sdan  INSERT INTO t1 VALUES(5, 'odd',  'five',  5);
30b6e9f7a4Sdan  INSERT INTO t1 VALUES(6, 'even', 'six',   6);
31b6e9f7a4Sdan}
32b6e9f7a4Sdan
33b6e9f7a4Sdanexecsql_test 1.1 {
34b6e9f7a4Sdan  SELECT c, sum(d) OVER (PARTITION BY b ORDER BY c) FROM t1;
35b6e9f7a4Sdan}
36b6e9f7a4Sdan
37b6e9f7a4Sdanexecsql_test 1.2 {
38b6e9f7a4Sdan  SELECT sum(d) OVER () FROM t1;
39b6e9f7a4Sdan}
40b6e9f7a4Sdan
41b6e9f7a4Sdanexecsql_test 1.3 {
42b6e9f7a4Sdan  SELECT sum(d) OVER (PARTITION BY b) FROM t1;
43b6e9f7a4Sdan}
44b6e9f7a4Sdan
45f9eae18bSdan==========
46f9eae18bSdanexecsql_test 2.1 {
47f9eae18bSdan  SELECT a, sum(d) OVER (
48c3a20c19Sdan    ORDER BY d
49c3a20c19Sdan    ROWS BETWEEN 1000 PRECEDING AND 1 FOLLOWING
50f9eae18bSdan  ) FROM t1
51f9eae18bSdan}
52f9eae18bSdanexecsql_test 2.2 {
53f9eae18bSdan  SELECT a, sum(d) OVER (
54c3a20c19Sdan    ORDER BY d
55c3a20c19Sdan    ROWS BETWEEN 1000 PRECEDING AND 1000 FOLLOWING
56f9eae18bSdan  ) FROM t1
57f9eae18bSdan}
58f9eae18bSdanexecsql_test 2.3 {
59f9eae18bSdan  SELECT a, sum(d) OVER (
60f9eae18bSdan    ORDER BY d
61c3a20c19Sdan    ROWS BETWEEN 1 PRECEDING AND 1000 FOLLOWING
62f9eae18bSdan  ) FROM t1
63f9eae18bSdan}
648471be33Sdanexecsql_test 2.4 {
658471be33Sdan  SELECT a, sum(d) OVER (
668471be33Sdan    ORDER BY d
678471be33Sdan    ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
688471be33Sdan  ) FROM t1
698471be33Sdan}
708471be33Sdanexecsql_test 2.5 {
718471be33Sdan  SELECT a, sum(d) OVER (
728471be33Sdan    ORDER BY d
73c3a20c19Sdan    ROWS BETWEEN 1 PRECEDING AND 0 FOLLOWING
74c3a20c19Sdan  ) FROM t1
75c3a20c19Sdan}
76c3a20c19Sdan
77c3a20c19Sdanexecsql_test 2.6 {
78c3a20c19Sdan  SELECT a, sum(d) OVER (
79c3a20c19Sdan    PARTITION BY b
80c3a20c19Sdan    ORDER BY d
81c3a20c19Sdan    ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
82c3a20c19Sdan  ) FROM t1
83c3a20c19Sdan}
84c3a20c19Sdan
85c3a20c19Sdanexecsql_test 2.7 {
86c3a20c19Sdan  SELECT a, sum(d) OVER (
87c3a20c19Sdan    PARTITION BY b
88c3a20c19Sdan    ORDER BY d
89c3a20c19Sdan    ROWS BETWEEN 0 PRECEDING AND 0 FOLLOWING
90c3a20c19Sdan  ) FROM t1
91c3a20c19Sdan}
92c3a20c19Sdan
9399652ddaSdanexecsql_test 2.8 {
9499652ddaSdan  SELECT a, sum(d) OVER (
9599652ddaSdan    ORDER BY d
9699652ddaSdan    ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING
9799652ddaSdan  ) FROM t1
9899652ddaSdan}
9999652ddaSdan
10099652ddaSdanexecsql_test 2.9 {
10199652ddaSdan  SELECT a, sum(d) OVER (
10299652ddaSdan    ORDER BY d
10399652ddaSdan    ROWS BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING
10499652ddaSdan  ) FROM t1
10599652ddaSdan}
10699652ddaSdan
10799652ddaSdanexecsql_test 2.10 {
10899652ddaSdan  SELECT a, sum(d) OVER (
10999652ddaSdan    ORDER BY d
11099652ddaSdan    ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING
11199652ddaSdan  ) FROM t1
11299652ddaSdan}
11399652ddaSdan
11499652ddaSdanexecsql_test 2.11 {
11599652ddaSdan  SELECT a, sum(d) OVER (
11699652ddaSdan    ORDER BY d
11799652ddaSdan    ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
11899652ddaSdan  ) FROM t1
11999652ddaSdan}
12099652ddaSdan
12199652ddaSdanexecsql_test 2.13 {
12299652ddaSdan  SELECT a, sum(d) OVER (
12399652ddaSdan    ORDER BY d
12499652ddaSdan    ROWS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING
12599652ddaSdan  ) FROM t1
12699652ddaSdan}
12799652ddaSdan
12831f5639fSdanexecsql_test 2.14 {
12931f5639fSdan  SELECT a, sum(d) OVER (
13031f5639fSdan    ORDER BY d
13131f5639fSdan    ROWS BETWEEN 3 PRECEDING AND 1 PRECEDING
13231f5639fSdan  ) FROM t1
13331f5639fSdan}
13431f5639fSdan
13531f5639fSdanexecsql_test 2.15 {
13631f5639fSdan  SELECT a, sum(d) OVER (
13731f5639fSdan    PARTITION BY b
13831f5639fSdan    ORDER BY d
13931f5639fSdan    ROWS BETWEEN 1 PRECEDING AND 0 PRECEDING
14031f5639fSdan  ) FROM t1
14131f5639fSdan}
14231f5639fSdan
14331f5639fSdanexecsql_test 2.16 {
14431f5639fSdan  SELECT a, sum(d) OVER (
14531f5639fSdan    PARTITION BY b
14631f5639fSdan    ORDER BY d
14731f5639fSdan    ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
14831f5639fSdan  ) FROM t1
14931f5639fSdan}
15031f5639fSdan
15131f5639fSdanexecsql_test 2.17 {
15231f5639fSdan  SELECT a, sum(d) OVER (
15331f5639fSdan    PARTITION BY b
15431f5639fSdan    ORDER BY d
15531f5639fSdan    ROWS BETWEEN 1 PRECEDING AND 2 PRECEDING
15631f5639fSdan  ) FROM t1
15731f5639fSdan}
15831f5639fSdan
15931f5639fSdanexecsql_test 2.18 {
16031f5639fSdan  SELECT a, sum(d) OVER (
16131f5639fSdan    PARTITION BY b
16231f5639fSdan    ORDER BY d
16331f5639fSdan    ROWS BETWEEN UNBOUNDED PRECEDING AND 2 PRECEDING
16431f5639fSdan  ) FROM t1
16531f5639fSdan}
16631f5639fSdan
167e105dd76Sdanexecsql_test 2.19 {
168e105dd76Sdan  SELECT a, sum(d) OVER (
169e105dd76Sdan    PARTITION BY b
170e105dd76Sdan    ORDER BY d
171e105dd76Sdan    ROWS BETWEEN 1 FOLLOWING AND 3 FOLLOWING
172e105dd76Sdan  ) FROM t1
173e105dd76Sdan}
174e105dd76Sdan
175e105dd76Sdanexecsql_test 2.20 {
176e105dd76Sdan  SELECT a, sum(d) OVER (
177e105dd76Sdan    ORDER BY d
178e105dd76Sdan    ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING
179e105dd76Sdan  ) FROM t1
180e105dd76Sdan}
181e105dd76Sdan
182e105dd76Sdanexecsql_test 2.21 {
183e105dd76Sdan  SELECT a, sum(d) OVER (
184e105dd76Sdan    ORDER BY d
185e105dd76Sdan    ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING
186e105dd76Sdan  ) FROM t1
187e105dd76Sdan}
188e105dd76Sdan
189e105dd76Sdanexecsql_test 2.22 {
190e105dd76Sdan  SELECT a, sum(d) OVER (
191e105dd76Sdan    PARTITION BY b
192e105dd76Sdan    ORDER BY d
193e105dd76Sdan    ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING
194e105dd76Sdan  ) FROM t1
195e105dd76Sdan}
19699652ddaSdan
19709590aaaSdanexecsql_test 2.23 {
19809590aaaSdan  SELECT a, sum(d) OVER (
19909590aaaSdan    ORDER BY d
20009590aaaSdan    ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
20109590aaaSdan  ) FROM t1
20209590aaaSdan}
20309590aaaSdan
20409590aaaSdanexecsql_test 2.24 {
20509590aaaSdan  SELECT a, sum(d) OVER (
20609590aaaSdan    PARTITION BY a%2
20709590aaaSdan    ORDER BY d
20809590aaaSdan    ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
20909590aaaSdan  ) FROM t1
21009590aaaSdan}
21109590aaaSdan
21209590aaaSdanexecsql_test 2.25 {
21309590aaaSdan  SELECT a, sum(d) OVER (
21409590aaaSdan    ORDER BY d
21509590aaaSdan    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
21609590aaaSdan  ) FROM t1
21709590aaaSdan}
21809590aaaSdan
21909590aaaSdanexecsql_test 2.26 {
22009590aaaSdan  SELECT a, sum(d) OVER (
22109590aaaSdan    PARTITION BY b
22209590aaaSdan    ORDER BY d
22309590aaaSdan    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
22409590aaaSdan  ) FROM t1
22509590aaaSdan}
22609590aaaSdan
22709590aaaSdanexecsql_test 2.27 {
22809590aaaSdan  SELECT a, sum(d) OVER (
22909590aaaSdan    ORDER BY d
23009590aaaSdan    ROWS BETWEEN CURRENT ROW AND CURRENT ROW
23109590aaaSdan  ) FROM t1
23209590aaaSdan}
23309590aaaSdan
23409590aaaSdanexecsql_test 2.28 {
23509590aaaSdan  SELECT a, sum(d) OVER (
23609590aaaSdan    PARTITION BY b
23709590aaaSdan    ORDER BY d
23809590aaaSdan    ROWS BETWEEN CURRENT ROW AND CURRENT ROW
23909590aaaSdan  ) FROM t1
24009590aaaSdan}
24109590aaaSdan
24209590aaaSdanexecsql_test 2.29 {
24309590aaaSdan  SELECT a, sum(d) OVER (
24409590aaaSdan    ORDER BY d
24509590aaaSdan    RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
24609590aaaSdan  ) FROM t1
24709590aaaSdan}
24809590aaaSdanexecsql_test 2.30 {
24909590aaaSdan  SELECT a, sum(d) OVER (
25009590aaaSdan    ORDER BY b
25109590aaaSdan    RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
25209590aaaSdan  ) FROM t1
25309590aaaSdan}
25409590aaaSdan
25579d4544dSdanexecsql_test 3.1 {
25679d4544dSdan  SELECT a, sum(d) OVER (
25779d4544dSdan    PARTITION BY b ORDER BY d
25879d4544dSdan    RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
25979d4544dSdan  ) FROM t1
26079d4544dSdan}
26179d4544dSdan
26279d4544dSdanexecsql_test 3.2 {
26379d4544dSdan  SELECT a, sum(d) OVER (
26479d4544dSdan    ORDER BY b
26579d4544dSdan    RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
26679d4544dSdan  ) FROM t1
26779d4544dSdan}
26879d4544dSdan
26979d4544dSdanexecsql_test 3.3 {
27079d4544dSdan  SELECT a, sum(d) OVER (
27179d4544dSdan    ORDER BY d
27279d4544dSdan    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
27379d4544dSdan  ) FROM t1
27479d4544dSdan}
27579d4544dSdan
27679d4544dSdanexecsql_test 3.4 {
27779d4544dSdan  SELECT a, sum(d) OVER (
27879d4544dSdan    ORDER BY d/2
27979d4544dSdan    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
28079d4544dSdan  ) FROM t1
28179d4544dSdan}
28279d4544dSdan
28379d4544dSdan#puts $::fd finish_test
28479d4544dSdan
285c3a20c19Sdan==========
286c3a20c19Sdan
28779d4544dSdanexecsql_test 4.0 {
28879d4544dSdan  DROP TABLE IF EXISTS t2;
28979d4544dSdan  CREATE TABLE t2(a INTEGER PRIMARY KEY, b INTEGER);
29079d4544dSdan  INSERT INTO t2(a, b) VALUES
29179d4544dSdan  (1,0), (2,74), (3,41), (4,74), (5,23), (6,99), (7,26), (8,33), (9,2),
29279d4544dSdan  (10,89), (11,81), (12,96), (13,59), (14,38), (15,68), (16,39), (17,62),
29379d4544dSdan  (18,91), (19,46), (20,6), (21,99), (22,97), (23,27), (24,46), (25,78),
29479d4544dSdan  (26,54), (27,97), (28,8), (29,67), (30,29), (31,93), (32,84), (33,77),
29579d4544dSdan  (34,23), (35,16), (36,16), (37,93), (38,65), (39,35), (40,47), (41,7),
29679d4544dSdan  (42,86), (43,74), (44,61), (45,91), (46,85), (47,24), (48,85), (49,43),
29779d4544dSdan  (50,59), (51,12), (52,32), (53,56), (54,3), (55,91), (56,22), (57,90),
29879d4544dSdan  (58,55), (59,15), (60,28), (61,89), (62,25), (63,47), (64,1), (65,56),
29979d4544dSdan  (66,40), (67,43), (68,56), (69,16), (70,75), (71,36), (72,89), (73,98),
30079d4544dSdan  (74,76), (75,81), (76,4), (77,94), (78,42), (79,30), (80,78), (81,33),
30179d4544dSdan  (82,29), (83,53), (84,63), (85,2), (86,87), (87,37), (88,80), (89,84),
30279d4544dSdan  (90,72), (91,41), (92,9), (93,61), (94,73), (95,95), (96,65), (97,13),
30379d4544dSdan  (98,58), (99,96), (100,98), (101,1), (102,21), (103,74), (104,65), (105,35),
30479d4544dSdan  (106,5), (107,73), (108,11), (109,51), (110,87), (111,41), (112,12), (113,8),
30579d4544dSdan  (114,20), (115,31), (116,31), (117,15), (118,95), (119,22), (120,73),
30679d4544dSdan  (121,79), (122,88), (123,34), (124,8), (125,11), (126,49), (127,34),
30779d4544dSdan  (128,90), (129,59), (130,96), (131,60), (132,55), (133,75), (134,77),
30879d4544dSdan  (135,44), (136,2), (137,7), (138,85), (139,57), (140,74), (141,29), (142,70),
30979d4544dSdan  (143,59), (144,19), (145,39), (146,26), (147,26), (148,47), (149,80),
31079d4544dSdan  (150,90), (151,36), (152,58), (153,47), (154,9), (155,72), (156,72), (157,66),
31179d4544dSdan  (158,33), (159,93), (160,75), (161,64), (162,81), (163,9), (164,23), (165,37),
31279d4544dSdan  (166,13), (167,12), (168,14), (169,62), (170,91), (171,36), (172,91),
31379d4544dSdan  (173,33), (174,15), (175,34), (176,36), (177,99), (178,3), (179,95), (180,69),
31479d4544dSdan  (181,58), (182,52), (183,30), (184,50), (185,84), (186,10), (187,84),
31579d4544dSdan  (188,33), (189,21), (190,39), (191,44), (192,58), (193,30), (194,38),
31679d4544dSdan  (195,34), (196,83), (197,27), (198,82), (199,17), (200,7);
31779d4544dSdan}
31879d4544dSdan
31979d4544dSdanexecsql_test 4.1 {
32079d4544dSdan  SELECT a, sum(b) OVER (
32179d4544dSdan    PARTITION BY (b%10)
32279d4544dSdan    ORDER BY b
32379d4544dSdan  ) FROM t2 ORDER BY a;
32479d4544dSdan}
32579d4544dSdan
32679d4544dSdanexecsql_test 4.2 {
32779d4544dSdan  SELECT a, sum(b) OVER (
32879d4544dSdan    PARTITION BY (b%10)
32979d4544dSdan    ORDER BY b
33079d4544dSdan    RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
33179d4544dSdan  ) FROM t2 ORDER BY a;
33279d4544dSdan}
33379d4544dSdan
33479d4544dSdanexecsql_test 4.3 {
33579d4544dSdan  SELECT b, sum(b) OVER (
33679d4544dSdan    ORDER BY b
33779d4544dSdan    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
33879d4544dSdan  ) FROM t2 ORDER BY b;
33979d4544dSdan}
34079d4544dSdan
341d6f784efSdanexecsql_test 4.4 {
342d6f784efSdan  SELECT b, sum(b) OVER (
343d6f784efSdan    ORDER BY b
344d6f784efSdan    RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
345d6f784efSdan  ) FROM t2 ORDER BY b;
346d6f784efSdan}
347d6f784efSdan
348d6f784efSdanexecsql_test 4.5 {
349d6f784efSdan  SELECT b, sum(b) OVER (
350d6f784efSdan    ORDER BY b
351d6f784efSdan    RANGE BETWEEN CURRENT ROW AND CURRENT ROW
352d6f784efSdan  ) FROM t2 ORDER BY b;
353d6f784efSdan}
354d6f784efSdan
355d6f784efSdanexecsql_test 4.6.1 {
356d6f784efSdan  SELECT b, sum(b) OVER (
357d6f784efSdan    RANGE BETWEEN CURRENT ROW AND CURRENT ROW
358d6f784efSdan  ) FROM t2 ORDER BY b;
359d6f784efSdan}
360d6f784efSdanexecsql_test 4.6.2 {
361d6f784efSdan  SELECT b, sum(b) OVER () FROM t2 ORDER BY b;
362d6f784efSdan}
363d6f784efSdanexecsql_test 4.6.3 {
364d6f784efSdan  SELECT b, sum(b) OVER (
365d6f784efSdan    RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
366d6f784efSdan  ) FROM t2 ORDER BY b;
367d6f784efSdan}
368d6f784efSdanexecsql_test 4.6.4 {
369d6f784efSdan  SELECT b, sum(b) OVER (
370d6f784efSdan    RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
371d6f784efSdan  ) FROM t2 ORDER BY b;
372d6f784efSdan}
373d6f784efSdan
374d6f784efSdanexecsql_test 4.7.1 {
375d6f784efSdan  SELECT b, sum(b) OVER (
376d6f784efSdan    ROWS BETWEEN CURRENT ROW AND CURRENT ROW
377d6f784efSdan  ) FROM t2 ORDER BY 1, 2;
378d6f784efSdan}
379d6f784efSdanexecsql_test 4.7.2 {
380d6f784efSdan  SELECT b, sum(b) OVER (
381d6f784efSdan    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
382d6f784efSdan  ) FROM t2 ORDER BY 1, 2;
383d6f784efSdan}
384d6f784efSdanexecsql_test 4.7.3 {
385d6f784efSdan  SELECT b, sum(b) OVER (
386d6f784efSdan    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
387d6f784efSdan  ) FROM t2 ORDER BY 1, 2;
388d6f784efSdan}
389d6f784efSdanexecsql_test 4.7.4 {
390d6f784efSdan  SELECT b, sum(b) OVER (
391d6f784efSdan    ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
392d6f784efSdan  ) FROM t2 ORDER BY 1, 2;
393d6f784efSdan}
394d6f784efSdan
395d6f784efSdanexecsql_test 4.8.1 {
396d6f784efSdan  SELECT b, sum(b) OVER (
397d6f784efSdan    ORDER BY a
398d6f784efSdan    ROWS BETWEEN CURRENT ROW AND CURRENT ROW
399d6f784efSdan  ) FROM t2 ORDER BY 1, 2;
400d6f784efSdan}
401d6f784efSdanexecsql_test 4.8.2 {
402d6f784efSdan  SELECT b, sum(b) OVER (
403d6f784efSdan    ORDER BY a
404d6f784efSdan    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
405d6f784efSdan  ) FROM t2 ORDER BY 1, 2;
406d6f784efSdan}
407d6f784efSdanexecsql_test 4.8.3 {
408d6f784efSdan  SELECT b, sum(b) OVER (
409d6f784efSdan    ORDER BY a
410d6f784efSdan    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
411d6f784efSdan  ) FROM t2 ORDER BY 1, 2;
412d6f784efSdan}
413d6f784efSdanexecsql_test 4.8.4 {
414d6f784efSdan  SELECT b, sum(b) OVER (
415d6f784efSdan    ORDER BY a
416d6f784efSdan    ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
417d6f784efSdan  ) FROM t2 ORDER BY 1, 2;
418d6f784efSdan}
419d6f784efSdan
42008f6de7fSdanexecsql_float_test 4.9 {
42108f6de7fSdan  SELECT
42208f6de7fSdan    rank() OVER win AS rank,
42308f6de7fSdan    cume_dist() OVER win AS cume_dist FROM t1
42408f6de7fSdan  WINDOW win AS (ORDER BY 1);
42508f6de7fSdan}
42608f6de7fSdan
427b28c4e56Sdanexecsql_test 4.10 {
428b28c4e56Sdan  SELECT count(*) OVER (ORDER BY b) FROM t1
429b28c4e56Sdan}
430b28c4e56Sdan
4311efcc9ddSdanexecsql_test 4.11 {
4321efcc9ddSdan  SELECT count(distinct a) FILTER (WHERE b='odd') FROM t1
4331efcc9ddSdan}
43479d4544dSdan
435a51ddb1eSdan==========
436a51ddb1eSdan
437a51ddb1eSdanexecsql_test 5.0 {
438a51ddb1eSdan  DROP TABLE IF EXISTS t1;
439a51ddb1eSdan  CREATE TABLE t1(x INTEGER, y INTEGER);
440a51ddb1eSdan  INSERT INTO t1 VALUES(10, 1);
441a51ddb1eSdan  INSERT INTO t1 VALUES(20, 2);
442a51ddb1eSdan  INSERT INTO t1 VALUES(3, 3);
443a51ddb1eSdan  INSERT INTO t1 VALUES(2, 4);
444a51ddb1eSdan  INSERT INTO t1 VALUES(1, 5);
445a51ddb1eSdan}
446a51ddb1eSdan
447a51ddb1eSdanexecsql_float_test 5.1 {
448a51ddb1eSdan  SELECT avg(x) OVER (ORDER BY y) AS z FROM t1 ORDER BY z;
449a51ddb1eSdan}
4508471be33Sdan
45169843342Sdan==========
45269843342Sdan
45369843342Sdanexecsql_test 6.0 {
45469843342Sdan  DROP TABLE IF EXISTS t0;
45569843342Sdan  CREATE TABLE t0(c0 INTEGER UNIQUE);
45669843342Sdan  INSERT INTO t0 VALUES(0);
45769843342Sdan}
45869843342Sdanexecsql_test 6.1 {
45969843342Sdan  SELECT DENSE_RANK() OVER(), LAG(0) OVER() FROM t0;
46069843342Sdan}
46169843342Sdanexecsql_test 6.2 {
46269843342Sdan  SELECT * FROM t0 WHERE
46369843342Sdan      (0, t0.c0) IN (SELECT DENSE_RANK() OVER(), LAG(0) OVER() FROM t0);
46469843342Sdan}
46569843342Sdan
466*d8d2fb92Sdan==========
467*d8d2fb92Sdan
468*d8d2fb92Sdanexecsql_test 7.0 {
469*d8d2fb92Sdan  DROP TABLE IF EXISTS t1;
470*d8d2fb92Sdan  CREATE TABLE t1(a INTEGER, b INTEGER, c INTEGER);
471*d8d2fb92Sdan  INSERT INTO t1 VALUES(1, 1, 1);
472*d8d2fb92Sdan  INSERT INTO t1 VALUES(1, 2, 2);
473*d8d2fb92Sdan  INSERT INTO t1 VALUES(3, 3, 3);
474*d8d2fb92Sdan  INSERT INTO t1 VALUES(3, 4, 4);
475*d8d2fb92Sdan}
476*d8d2fb92Sdan
477*d8d2fb92Sdanexecsql_test 7.1 {
478*d8d2fb92Sdan  SELECT c, sum(c) OVER win1 FROM t1
479*d8d2fb92Sdan  WINDOW win1 AS (ORDER BY b)
480*d8d2fb92Sdan}
481*d8d2fb92Sdan
482*d8d2fb92Sdanexecsql_test 7.2 {
483*d8d2fb92Sdan  SELECT c, sum(c) OVER win1 FROM t1
484*d8d2fb92Sdan  WINDOW win1 AS (PARTITION BY 1 ORDER BY b)
485*d8d2fb92Sdan}
486*d8d2fb92Sdan
487*d8d2fb92Sdanexecsql_test 7.3 {
488*d8d2fb92Sdan  SELECT c, sum(c) OVER win1 FROM t1
489*d8d2fb92Sdan  WINDOW win1 AS (ORDER BY 1)
490*d8d2fb92Sdan}
491*d8d2fb92Sdan
492b6e9f7a4Sdanfinish_test
493b6e9f7a4Sdan
494b6e9f7a4Sdan
495