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