fold_constants.slt 112 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. statement ok
  10. CREATE VIEW billion AS SELECT * FROM generate_series(0, 999) AS x, generate_series(0, 999) AS y, generate_series(0, 999) AS z;
  11. statement ok
  12. CREATE TABLE edges(src INTEGER NOT NULL, dst INTEGER NOT NULL);
  13. # Test that this query doesn't compute the answer entirely as a constant
  14. # (as the way that works currently would require a huge memory blowup).
  15. #
  16. # If we make it so that reductions on constants
  17. # can be computed without writing out
  18. # the entire input constant in unary, we can get rid of this test:
  19. # See https://github.com/MaterializeInc/database-issues/issues/3723 .
  20. query T multiline
  21. EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR SELECT count(*) FROM billion;
  22. ----
  23. Explained Query:
  24. With
  25. cte l0 =
  26. Reduce aggregates=[count(*)] monotonic // { arity: 1 }
  27. Constant // { arity: 0 }
  28. - (() x 1000000000)
  29. Return // { arity: 1 }
  30. Union // { arity: 1 }
  31. Get l0 // { arity: 1 }
  32. Map (0) // { arity: 1 }
  33. Union // { arity: 0 }
  34. Negate // { arity: 0 }
  35. Project () // { arity: 0 }
  36. Get l0 // { arity: 1 }
  37. Constant // { arity: 0 }
  38. - ()
  39. Target cluster: quickstart
  40. EOF
  41. # Regression test for https://github.com/MaterializeInc/database-issues/issues/4672
  42. statement ok
  43. CREATE TABLE t1 (f1 int, f2 int);
  44. statement ok
  45. CREATE TABLE t2 (f1 int, f2 int);
  46. query IIIRR
  47. SELECT (a1.f1) AS c1, (a2.f1) AS c2, (a1.f2) AS c3, (MIN ( 4 )) AS agg1 , (AVG ( a1 . f2 + 4 )) AS agg2 FROM ( SELECT a1 . f2 + 4 AS f1 , a2 . f2 AS f2 FROM t1 AS a1 JOIN t2 AS a2 ON ( a1 . f1 = a1 . f2 + 8 ) WHERE a1 . f1 + a1 . f2 < a2 . f2 + a1 . f2 AND NOT ( NOT ( a2 . f2 IS NOT NULL ) ) ORDER BY 1 , 2 LIMIT 4 ) AS a1 JOIN ( SELECT AVG ( a2 . f2 + a2 . f2 ) AS f1 , AVG ( a2 . f2 ) AS f2 FROM t2 AS a1 JOIN t2 AS a2 ON ( NOT ( NOT ( a2 . f2 = 5 ) ) ) WHERE a2 . f1 IS NOT NULL AND a2 . f2 IN ( 0 , 3 , 0 , 4 , 9 , 6 ) ORDER BY 1 , 2 LIMIT 2 ) AS a2 ON ( NOT ( 4 = 3 ) ) WHERE a1 . f2 + a2 . f1 IN ( 0 , 7 ) AND 5 NOT IN ( SELECT c3 AS x1 FROM ( SELECT (a1.f1) AS c1, (a2.f1) AS c2, (a1.f2) AS c3, (FIRST_VALUE ( a2.f1 ) OVER ( ORDER BY a1.f1 , a2.f1 , a1.f2 )) AS agg1 , (MIN ( 7 )) AS agg2 FROM ( SELECT a2 . f1 AS f1 , COUNT ( 2 ) AS f2 FROM t1 AS a1 JOIN t1 AS a2 ON ( 8 NOT IN ( 3 , 2 ) ) WHERE a1 . f1 + a2 . f2 IS NOT NULL AND a2 . f2 IN ( SELECT DISTINCT agg2 AS x1 FROM ( SELECT (a1.f1) AS c1, (a2.f1) AS c2, (a1.f2) AS c3, (MIN ( a2 . f1 )) AS agg1 , (MIN ( 2 )) AS agg2 FROM t1 AS a1 JOIN ( SELECT 8 AS f1 , COUNT ( 8 ) AS f2 FROM t2 AS a1 LEFT JOIN t2 AS a2 ON ( 1 < a1 . f2 ) WHERE 2 > 7 AND a2 . f2 + a1 . f2 > a1 . f2 + a1 . f2 AND a2 . f2 + a2 . f1 IS NULL GROUP BY 1 ORDER BY 1 , 2 LIMIT 5 OFFSET 2 ) AS a2 USING ( f2 , f1 ) WHERE a1 . f1 + a1 . f2 IS NOT NULL AND NOT ( 2 IN ( 8 , 2 ) ) AND 3 > a1 . f1 AND a2 . f2 IS NULL GROUP BY 1 , 2 , 3 ) AS dt ORDER BY 1 LIMIT 5 ) OR 3 = a1 . f1 GROUP BY 1 ORDER BY 1 , 2 LIMIT 8 ) AS a1 RIGHT JOIN t1 AS a2 ON ( NOT ( 4 NOT IN ( 5 , 3 ) ) ) WHERE NOT ( 8 > a1 . f2 + a1 . f1 ) OR a2 . f2 IS NOT NULL AND 5 NOT IN ( 4 , 4 , 2 , 6 ) GROUP BY 1 , 2 , 3 ) AS dt ORDER BY 1 LIMIT 9 OFFSET 8 ) GROUP BY 1 , 2 , 3 ;
  48. ----
  49. # WITH MUTUALLY RECURSIVE support
  50. # -------------------------------
  51. # Fold `Constant` inputs in WMR branches.
  52. # In theory we should be able to run the WMR loop once under the assumption
  53. # that all initial LetRec bindings are empty. If do this, the `l0` binding
  54. # below will simplify to a constant.
  55. query T multiline
  56. EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR
  57. WITH MUTUALLY RECURSIVE
  58. c0(src INT, dst INT) AS (
  59. SELECT * FROM c0
  60. UNION
  61. SELECT src * 2, dst * 2 FROM (VALUES (31, 32), (33, 34)) AS constant(src, dst)
  62. UNION
  63. (
  64. SELECT src + 1, dst + 1 FROM (VALUES (41, 42), (43, 44), (44, 45)) AS constant(src, dst) WHERE src > 1
  65. EXCEPT
  66. SELECT src + 2, dst + 2 FROM (VALUES (41, 42), (43, 44), (44, 45)) AS constant(src, dst)
  67. )
  68. UNION
  69. (
  70. SELECT DISTINCT
  71. x.src, y.dst
  72. FROM
  73. (VALUES (51, 52), (52, 53), (53, 54), (54, 55)) AS x(src, dst),
  74. (VALUES (52, 53), (53, 54), (54, 55)) AS y(src, dst),
  75. (VALUES (53, 51), (54, 52), (54, 53)) AS z(src, dst)
  76. WHERE
  77. x.dst = y.src AND y.dst = z.src AND z.dst = x.src
  78. )
  79. )
  80. SELECT * FROM c0
  81. ----
  82. Explained Query:
  83. With Mutually Recursive
  84. cte l0 =
  85. Distinct project=[#0, #1] monotonic // { arity: 2 }
  86. Union // { arity: 2 }
  87. Get l0 // { arity: 2 }
  88. Constant // { arity: 2 }
  89. - (42, 43)
  90. - (44, 45)
  91. - (51, 53)
  92. - (52, 54)
  93. - (62, 64)
  94. - (66, 68)
  95. Return // { arity: 2 }
  96. Get l0 // { arity: 2 }
  97. Target cluster: quickstart
  98. EOF
  99. # Replace subtrees rooted at `Filter false` with `Constant <empty>`
  100. query T multiline
  101. EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR
  102. WITH MUTUALLY RECURSIVE
  103. c0(n INT) AS (
  104. SELECT src FROM edges WHERE false -- literal false
  105. UNION ALL
  106. SELECT dst FROM edges
  107. UNION ALL
  108. SELECT * FROM c0 WHERE n IS NULL -- impossible condition (depends on column_knowledge)
  109. UNION
  110. SELECT * FROM c0 WHERE n IS NOT NULL -- complement (always true)
  111. )
  112. SELECT * FROM c0
  113. ----
  114. Explained Query:
  115. With Mutually Recursive
  116. cte l0 =
  117. Distinct project=[#0{dst}] // { arity: 1 }
  118. Union // { arity: 1 }
  119. Project (#1{dst}) // { arity: 1 }
  120. ReadStorage materialize.public.edges // { arity: 2 }
  121. Get l0 // { arity: 1 }
  122. Return // { arity: 1 }
  123. Get l0 // { arity: 1 }
  124. Source materialize.public.edges
  125. Target cluster: quickstart
  126. EOF
  127. statement ok
  128. DROP TABLE t1;
  129. statement ok
  130. DROP TABLE t2;
  131. # Window function tests
  132. # These tests were mostly copied (at some point) from `window_funcs.slt`, but here they have `WITH ... VALUES ...`, i.e.
  133. # constant inputs. These are good to have because constant folding is a different code path from the normal execution.
  134. # ----------------------------------------------------------------------------------------------------------------------
  135. mode cockroach
  136. statement error db error: ERROR: window function pg_catalog\.row_number requires an OVER clause
  137. WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
  138. SELECT row_number() FROM t
  139. query IT
  140. WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
  141. SELECT row_number() OVER (ORDER BY x), x FROM t
  142. ORDER BY row_number
  143. ----
  144. 1 a
  145. 2 b
  146. 3 c
  147. query IT
  148. WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
  149. SELECT row_number() OVER (ORDER BY x DESC), x FROM t
  150. ORDER BY row_number
  151. ----
  152. 1 c
  153. 2 b
  154. 3 a
  155. query IT
  156. WITH t (x, y) AS (VALUES ('a', 98), ('b', 99), ('c', 98))
  157. SELECT row_number() OVER (PARTITION BY y ORDER BY x), x FROM t
  158. ORDER BY row_number, x
  159. ----
  160. 1 a
  161. 1 b
  162. 2 c
  163. query IT
  164. WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
  165. SELECT row_number() OVER (PARTITION BY y ORDER BY x DESC), x FROM t
  166. ORDER BY row_number, x
  167. ----
  168. 1 b
  169. 1 c
  170. 2 a
  171. query IT
  172. WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
  173. SELECT row_number() OVER (PARTITION BY x ORDER BY x), x FROM t
  174. ORDER BY row_number, x
  175. ----
  176. 1 a
  177. 1 b
  178. 1 c
  179. query IT
  180. WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
  181. SELECT row_number() OVER (PARTITION BY NULL ORDER BY 10000) AS q, a1.x
  182. FROM t AS a1, t AS a2
  183. ORDER BY q DESC
  184. ----
  185. 9 c
  186. 8 c
  187. 7 c
  188. 6 b
  189. 5 b
  190. 4 b
  191. 3 a
  192. 2 a
  193. 1 a
  194. # Make sure a non-column expression following the window function is correctly
  195. # handled.
  196. query ITT
  197. WITH t (x) AS (VALUES ('a'))
  198. SELECT row_number() OVER (PARTITION BY NULL) AS q, x, 'b'
  199. FROM t
  200. ----
  201. 1 a b
  202. # Regression test for database-issues#2730
  203. query II
  204. SELECT row_number() OVER (), row_number() OVER ()
  205. ----
  206. 1 1
  207. query II
  208. WITH t (x) AS (VALUES ('a'), ('b'))
  209. SELECT row_number() OVER (), row_number() OVER () from t
  210. ----
  211. 1 1
  212. 2 2
  213. # Regression for database-issues#2962
  214. query error window functions are not allowed in ON
  215. WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
  216. SELECT * FROM t AS v JOIN t ON row_number() over () > 1;
  217. query error window functions are not allowed in WHERE
  218. WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
  219. SELECT * FROM t
  220. WHERE row_number() over () > 1;
  221. query T
  222. WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
  223. SELECT DISTINCT ON (row_number() OVER ()) *
  224. FROM t
  225. ORDER BY row_number() OVER ()
  226. ----
  227. a
  228. b
  229. c
  230. # dense_rank
  231. query IT
  232. WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
  233. SELECT dense_rank() OVER (ORDER BY x), x FROM t
  234. ORDER BY dense_rank
  235. ----
  236. 1 a
  237. 2 b
  238. 3 c
  239. query IT
  240. WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'))
  241. SELECT dense_rank() OVER (ORDER BY x), x FROM t
  242. ORDER BY dense_rank
  243. ----
  244. 1 a
  245. 2 b
  246. 2 b
  247. 3 c
  248. query IT
  249. WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'), ('c'))
  250. SELECT dense_rank() OVER (ORDER BY x), x FROM t
  251. ORDER BY dense_rank
  252. ----
  253. 1 a
  254. 2 b
  255. 2 b
  256. 3 c
  257. 3 c
  258. query IT
  259. WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
  260. SELECT dense_rank() OVER (ORDER BY x DESC), x FROM t
  261. ORDER BY dense_rank
  262. ----
  263. 1 c
  264. 2 b
  265. 3 a
  266. query IT
  267. WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'))
  268. SELECT dense_rank() OVER (ORDER BY x DESC), x FROM t
  269. ORDER BY dense_rank
  270. ----
  271. 1 c
  272. 2 b
  273. 2 b
  274. 3 a
  275. query IT
  276. WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'), ('c'))
  277. SELECT dense_rank() OVER (ORDER BY x DESC), x FROM t
  278. ORDER BY dense_rank
  279. ----
  280. 1 c
  281. 1 c
  282. 2 b
  283. 2 b
  284. 3 a
  285. query IT
  286. WITH t (x, y) AS (VALUES ('a', 98), ('b', 99), ('c', 98))
  287. SELECT dense_rank() OVER (PARTITION BY y ORDER BY x), x FROM t
  288. ORDER BY dense_rank, x
  289. ----
  290. 1 a
  291. 1 b
  292. 2 c
  293. query IT
  294. WITH t (x, y) AS (VALUES ('a', 98), ('b', 99), ('c', 98), ('a', 98), ('a', 99))
  295. SELECT dense_rank() OVER (PARTITION BY y ORDER BY x), x FROM t
  296. ORDER BY dense_rank, x
  297. ----
  298. 1 a
  299. 1 a
  300. 1 a
  301. 2 b
  302. 2 c
  303. query IT
  304. WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
  305. SELECT dense_rank() OVER (PARTITION BY y ORDER BY x DESC), x FROM t
  306. ORDER BY dense_rank, x
  307. ----
  308. 1 b
  309. 1 c
  310. 2 a
  311. query IT
  312. WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
  313. SELECT dense_rank() OVER (PARTITION BY x ORDER BY x), x FROM t
  314. ORDER BY dense_rank, x
  315. ----
  316. 1 a
  317. 1 b
  318. 1 c
  319. query IT
  320. WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
  321. SELECT dense_rank() OVER (PARTITION BY NULL ORDER BY 10000) AS q, a1.x
  322. FROM t AS a1, t AS a2
  323. ORDER BY q DESC, a1.x DESC
  324. ----
  325. 1 c
  326. 1 c
  327. 1 c
  328. 1 b
  329. 1 b
  330. 1 b
  331. 1 a
  332. 1 a
  333. 1 a
  334. # Make sure a non-column expression following the window function is correctly
  335. # handled.
  336. query ITT
  337. WITH t (x) AS (VALUES ('a'))
  338. SELECT dense_rank() OVER (PARTITION BY NULL) AS q, x, 'b'
  339. FROM t
  340. ----
  341. 1 a b
  342. query IITT
  343. WITH t (x, y, z) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0))
  344. SELECT dense_rank() OVER (PARTITION BY y ORDER BY x DESC, z), x, y, z
  345. FROM t
  346. ORDER BY y, x DESC, z
  347. ----
  348. 1 3 a 1
  349. 2 2 a 1
  350. 2 2 a 1
  351. 3 1 a 1
  352. 1 4 b 0
  353. 2 4 b 1
  354. 1 3 c 1
  355. 2 2 c NaN
  356. 3 1 c NaN
  357. # NaNs have the same rank
  358. query IITT
  359. WITH t (x, y, z) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0))
  360. SELECT dense_rank() OVER (PARTITION BY y ORDER BY z DESC), x, y, z
  361. FROM t
  362. ORDER BY y, z DESC, x
  363. ----
  364. 1 1 a 1
  365. 1 2 a 1
  366. 1 2 a 1
  367. 1 3 a 1
  368. 1 4 b 1
  369. 2 4 b 0
  370. 1 1 c NaN
  371. 1 2 c NaN
  372. 2 3 c 1
  373. ## lag
  374. # Simple cases
  375. query TT
  376. WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
  377. SELECT lag(x) OVER (ORDER BY x), x FROM t
  378. ORDER BY x, lag
  379. ----
  380. NULL a
  381. a b
  382. b c
  383. query TT
  384. WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'))
  385. SELECT lag(x) OVER (ORDER BY x), x FROM t
  386. ORDER BY x, lag
  387. ----
  388. NULL a
  389. a b
  390. b b
  391. b c
  392. query TT
  393. WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'), ('c'))
  394. SELECT lag(x) OVER (ORDER BY x), x FROM t
  395. ORDER BY x, lag
  396. ----
  397. NULL a
  398. a b
  399. b b
  400. b c
  401. c c
  402. query TT
  403. WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
  404. SELECT lag(x) OVER (ORDER BY x DESC), x FROM t
  405. ORDER BY x, lag
  406. ----
  407. b a
  408. c b
  409. NULL c
  410. query TT
  411. WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'))
  412. SELECT lag(x) OVER (ORDER BY x DESC), x FROM t
  413. ORDER BY x, lag
  414. ----
  415. b a
  416. b b
  417. c b
  418. NULL c
  419. query TT
  420. WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'), ('c'))
  421. SELECT lag(x) OVER (ORDER BY x DESC), x FROM t
  422. ORDER BY x, lag
  423. ----
  424. b a
  425. b b
  426. c b
  427. c c
  428. NULL c
  429. query TT
  430. WITH t (x, y) AS (VALUES ('a', 98), ('b', 99), ('c', 98))
  431. SELECT lag(x) OVER (PARTITION BY y ORDER BY x), x FROM t
  432. ORDER BY x, lag
  433. ----
  434. NULL a
  435. NULL b
  436. a c
  437. query TT
  438. WITH t (x, y) AS (VALUES ('a', 98), ('b', 99), ('c', 98), ('a', 98), ('a', 99))
  439. SELECT lag(x) OVER (PARTITION BY y ORDER BY x), x FROM t
  440. ORDER BY x, lag
  441. ----
  442. a a
  443. NULL a
  444. NULL a
  445. a b
  446. a c
  447. query TT
  448. WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
  449. SELECT lag(x) OVER (PARTITION BY y ORDER BY x DESC), x FROM t
  450. ORDER BY x, lag
  451. ----
  452. c a
  453. NULL b
  454. NULL c
  455. query TT
  456. WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
  457. SELECT lag(x) OVER (PARTITION BY x ORDER BY x), x FROM t
  458. ORDER BY x, lag
  459. ----
  460. NULL a
  461. NULL b
  462. NULL c
  463. query TT
  464. WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
  465. SELECT lag(a1.x) OVER (PARTITION BY NULL ORDER BY 10000) AS q, a1.x
  466. FROM t AS a1, t AS a2
  467. ORDER BY q DESC, a1.x DESC
  468. ----
  469. NULL a
  470. c c
  471. c c
  472. b c
  473. b b
  474. b b
  475. a b
  476. a a
  477. a a
  478. query ITTT
  479. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  480. SELECT f1, f2, f3, lag(f1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  481. FROM t
  482. ORDER BY f2 DESC, f3 DESC, f1, lag
  483. ----
  484. 7 d -5 NULL
  485. 1 c NaN NULL
  486. 2 c NaN 1
  487. 3 c 1 2
  488. 4 b 1 NULL
  489. 4 b 0 4
  490. 1 a 1 NULL
  491. 2 a 1 1
  492. 2 a 1 2
  493. 3 a 1 2
  494. query ITTT
  495. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  496. SELECT f1, f2, f3, lag(f1, 1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  497. FROM t
  498. ORDER BY f2 DESC, f3 DESC, f1, lag
  499. ----
  500. 7 d -5 NULL
  501. 1 c NaN NULL
  502. 2 c NaN 1
  503. 3 c 1 2
  504. 4 b 1 NULL
  505. 4 b 0 4
  506. 1 a 1 NULL
  507. 2 a 1 1
  508. 2 a 1 2
  509. 3 a 1 2
  510. query ITTT
  511. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  512. SELECT f1, f2, f3, lag(f1, 1, NULL) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  513. FROM t
  514. ORDER BY f2 DESC, f3 DESC, f1, lag
  515. ----
  516. 7 d -5 NULL
  517. 1 c NaN NULL
  518. 2 c NaN 1
  519. 3 c 1 2
  520. 4 b 1 NULL
  521. 4 b 0 4
  522. 1 a 1 NULL
  523. 2 a 1 1
  524. 2 a 1 2
  525. 3 a 1 2
  526. # With default value
  527. query ITTT
  528. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  529. SELECT f1, f2, f3, lag(f1, 1, -1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  530. FROM t
  531. ORDER BY f2 DESC, f3 DESC, f1, lag
  532. ----
  533. 7 d -5 -1
  534. 1 c NaN -1
  535. 2 c NaN 1
  536. 3 c 1 2
  537. 4 b 1 -1
  538. 4 b 0 4
  539. 1 a 1 -1
  540. 2 a 1 1
  541. 2 a 1 2
  542. 3 a 1 2
  543. # Complex expressions
  544. query ITTT
  545. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  546. SELECT f1, f2, f3, lag(f1 + coalesce(nullif(f3, 'NaN'), -10)) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  547. FROM t
  548. ORDER BY f2 DESC, f3 DESC, f1, lag
  549. ----
  550. 7 d -5 NULL
  551. 1 c NaN NULL
  552. 2 c NaN -9
  553. 3 c 1 -8
  554. 4 b 1 NULL
  555. 4 b 0 5
  556. 1 a 1 NULL
  557. 2 a 1 2
  558. 2 a 1 3
  559. 3 a 1 3
  560. # Nulls in the first argument
  561. query ITTT
  562. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  563. SELECT f1, f2, f3, lag(NULL::int) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  564. FROM t
  565. ORDER BY f2 DESC, f3 DESC, f1, lag
  566. ----
  567. 7 d -5 NULL
  568. 1 c NaN NULL
  569. 2 c NaN NULL
  570. 3 c 1 NULL
  571. 4 b 1 NULL
  572. 4 b 0 NULL
  573. 1 a 1 NULL
  574. 2 a 1 NULL
  575. 2 a 1 NULL
  576. 3 a 1 NULL
  577. query ITTT
  578. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  579. SELECT f1, f2, f3, lag(nullif(f1, 4)) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  580. FROM t
  581. ORDER BY f2 DESC, f3 DESC, f1, lag
  582. ----
  583. 7 d -5 NULL
  584. 1 c NaN NULL
  585. 2 c NaN 1
  586. 3 c 1 2
  587. 4 b 1 NULL
  588. 4 b 0 NULL
  589. 1 a 1 NULL
  590. 2 a 1 1
  591. 2 a 1 2
  592. 3 a 1 2
  593. # Nulls in the first argument with a default value in the third argument
  594. query ITTT
  595. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  596. SELECT f1, f2, f3, lag(NULL::int, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  597. FROM t
  598. ORDER BY f2 DESC, f3 DESC, f1, lag
  599. ----
  600. 7 d -5 NULL
  601. 1 c NaN NULL
  602. 2 c NaN NULL
  603. 3 c 1 NULL
  604. 4 b 1 NULL
  605. 4 b 0 NULL
  606. 1 a 1 NULL
  607. 2 a 1 NULL
  608. 2 a 1 NULL
  609. 3 a 1 NULL
  610. # Zero offset
  611. query ITTT
  612. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  613. SELECT f1, f2, f3, lag(f1, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  614. FROM t
  615. ORDER BY f2 DESC, f3 DESC, f1, lag
  616. ----
  617. 7 d -5 7
  618. 1 c NaN 1
  619. 2 c NaN 2
  620. 3 c 1 3
  621. 4 b 1 4
  622. 4 b 0 4
  623. 1 a 1 1
  624. 2 a 1 2
  625. 2 a 1 2
  626. 3 a 1 3
  627. query ITTT
  628. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  629. SELECT f1, f2, f3, lag(f1 + f3, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  630. FROM t
  631. ORDER BY f2 DESC, f3 DESC, f1, lag
  632. ----
  633. 7 d -5 2
  634. 1 c NaN NaN
  635. 2 c NaN NaN
  636. 3 c 1 4
  637. 4 b 1 5
  638. 4 b 0 4
  639. 1 a 1 2
  640. 2 a 1 3
  641. 2 a 1 3
  642. 3 a 1 4
  643. # Positive offsets
  644. query ITTT
  645. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  646. SELECT f1, f2, f3, lag(f1, 2) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  647. FROM t
  648. ORDER BY f2 DESC, f3 DESC, f1, lag
  649. ----
  650. 7 d -5 NULL
  651. 1 c NaN NULL
  652. 2 c NaN NULL
  653. 3 c 1 1
  654. 4 b 1 NULL
  655. 4 b 0 NULL
  656. 1 a 1 NULL
  657. 2 a 1 1
  658. 2 a 1 NULL
  659. 3 a 1 2
  660. query ITTT
  661. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  662. SELECT f1, f2, f3, lag(f1 + f3, 2) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  663. FROM t
  664. ORDER BY f2 DESC, f3 DESC, f1, lag
  665. ----
  666. 7 d -5 NULL
  667. 1 c NaN NULL
  668. 2 c NaN NULL
  669. 3 c 1 NaN
  670. 4 b 1 NULL
  671. 4 b 0 NULL
  672. 1 a 1 NULL
  673. 2 a 1 2
  674. 2 a 1 NULL
  675. 3 a 1 3
  676. # Out of range positive offsets
  677. query ITTT
  678. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  679. SELECT f1, f2, f3, lag(f1, 10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  680. FROM t
  681. ORDER BY f2 DESC, f3 DESC, f1, lag
  682. ----
  683. 7 d -5 NULL
  684. 1 c NaN NULL
  685. 2 c NaN NULL
  686. 3 c 1 NULL
  687. 4 b 1 NULL
  688. 4 b 0 NULL
  689. 1 a 1 NULL
  690. 2 a 1 NULL
  691. 2 a 1 NULL
  692. 3 a 1 NULL
  693. query ITTT
  694. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  695. SELECT f1, f2, f3, lag(f1 + f3, 10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  696. FROM t
  697. ORDER BY f2 DESC, f3 DESC, f1, lag
  698. ----
  699. 7 d -5 NULL
  700. 1 c NaN NULL
  701. 2 c NaN NULL
  702. 3 c 1 NULL
  703. 4 b 1 NULL
  704. 4 b 0 NULL
  705. 1 a 1 NULL
  706. 2 a 1 NULL
  707. 2 a 1 NULL
  708. 3 a 1 NULL
  709. query ITTT
  710. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  711. SELECT f1, f2, f3, lag(f1 + f3, 10, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  712. FROM t
  713. ORDER BY f2 DESC, f3 DESC, f1, lag
  714. ----
  715. 7 d -5 0
  716. 1 c NaN 0
  717. 2 c NaN 0
  718. 3 c 1 0
  719. 4 b 1 0
  720. 4 b 0 0
  721. 1 a 1 0
  722. 2 a 1 0
  723. 2 a 1 0
  724. 3 a 1 0
  725. # Negative offsets
  726. query ITTT
  727. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  728. SELECT f1, f2, f3, lag(f1, -1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  729. FROM t
  730. ORDER BY f2 DESC, f3 DESC, f1, lag
  731. ----
  732. 7 d -5 NULL
  733. 1 c NaN 2
  734. 2 c NaN 3
  735. 3 c 1 NULL
  736. 4 b 1 4
  737. 4 b 0 NULL
  738. 1 a 1 2
  739. 2 a 1 2
  740. 2 a 1 3
  741. 3 a 1 NULL
  742. query ITTT
  743. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  744. SELECT f1, f2, f3, lag(f1 + f3, -1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  745. FROM t
  746. ORDER BY f2 DESC, f3 DESC, f1, lag
  747. ----
  748. 7 d -5 NULL
  749. 1 c NaN NaN
  750. 2 c NaN 4
  751. 3 c 1 NULL
  752. 4 b 1 4
  753. 4 b 0 NULL
  754. 1 a 1 3
  755. 2 a 1 3
  756. 2 a 1 4
  757. 3 a 1 NULL
  758. query ITTT
  759. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  760. SELECT f1, f2, f3, lag(f1 + f3, -2) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  761. FROM t
  762. ORDER BY f2 DESC, f3 DESC, f1, lag
  763. ----
  764. 7 d -5 NULL
  765. 1 c NaN 4
  766. 2 c NaN NULL
  767. 3 c 1 NULL
  768. 4 b 1 NULL
  769. 4 b 0 NULL
  770. 1 a 1 3
  771. 2 a 1 4
  772. 2 a 1 NULL
  773. 3 a 1 NULL
  774. # Out of range negative offsets
  775. query ITTT
  776. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  777. SELECT f1, f2, f3, lag(f1, -10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  778. FROM t
  779. ORDER BY f2 DESC, f3 DESC, f1, lag
  780. ----
  781. 7 d -5 NULL
  782. 1 c NaN NULL
  783. 2 c NaN NULL
  784. 3 c 1 NULL
  785. 4 b 1 NULL
  786. 4 b 0 NULL
  787. 1 a 1 NULL
  788. 2 a 1 NULL
  789. 2 a 1 NULL
  790. 3 a 1 NULL
  791. query ITTT
  792. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  793. SELECT f1, f2, f3, lag(f1 + f3, -10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  794. FROM t
  795. ORDER BY f2 DESC, f3 DESC, f1, lag
  796. ----
  797. 7 d -5 NULL
  798. 1 c NaN NULL
  799. 2 c NaN NULL
  800. 3 c 1 NULL
  801. 4 b 1 NULL
  802. 4 b 0 NULL
  803. 1 a 1 NULL
  804. 2 a 1 NULL
  805. 2 a 1 NULL
  806. 3 a 1 NULL
  807. query ITTT
  808. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  809. SELECT f1, f2, f3, lag(f1, -10, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  810. FROM t
  811. ORDER BY f2 DESC, f3 DESC, f1, lag
  812. ----
  813. 7 d -5 0
  814. 1 c NaN 0
  815. 2 c NaN 0
  816. 3 c 1 0
  817. 4 b 1 0
  818. 4 b 0 0
  819. 1 a 1 0
  820. 2 a 1 0
  821. 2 a 1 0
  822. 3 a 1 0
  823. # Variable per row offsets
  824. query ITTT
  825. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  826. SELECT f1, f2, f3, lag(f1, f1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  827. FROM t
  828. ORDER BY f2 DESC, f3 DESC, f1, lag
  829. ----
  830. 7 d -5 NULL
  831. 1 c NaN NULL
  832. 2 c NaN NULL
  833. 3 c 1 NULL
  834. 4 b 1 NULL
  835. 4 b 0 NULL
  836. 1 a 1 NULL
  837. 2 a 1 1
  838. 2 a 1 NULL
  839. 3 a 1 1
  840. query ITTT
  841. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  842. SELECT f1, f2, f3, lag(f1, f1 - 1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  843. FROM t
  844. ORDER BY f2 DESC, f3 DESC, f1, lag
  845. ----
  846. 7 d -5 NULL
  847. 1 c NaN 1
  848. 2 c NaN 1
  849. 3 c 1 1
  850. 4 b 1 NULL
  851. 4 b 0 NULL
  852. 1 a 1 1
  853. 2 a 1 1
  854. 2 a 1 2
  855. 3 a 1 2
  856. # Null offsets
  857. query ITTT
  858. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  859. SELECT f1, f2, f3, lag(f1, NULL) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  860. FROM t
  861. ORDER BY f2 DESC, f3 DESC, f1, lag
  862. ----
  863. 7 d -5 NULL
  864. 1 c NaN NULL
  865. 2 c NaN NULL
  866. 3 c 1 NULL
  867. 4 b 1 NULL
  868. 4 b 0 NULL
  869. 1 a 1 NULL
  870. 2 a 1 NULL
  871. 2 a 1 NULL
  872. 3 a 1 NULL
  873. query ITTT
  874. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  875. SELECT f1, f2, f3, lag(f1, nullif(f1, 1)) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  876. FROM t
  877. ORDER BY f2 DESC, f3 DESC, f1, lag
  878. ----
  879. 7 d -5 NULL
  880. 1 c NaN NULL
  881. 2 c NaN NULL
  882. 3 c 1 NULL
  883. 4 b 1 NULL
  884. 4 b 0 NULL
  885. 1 a 1 NULL
  886. 2 a 1 1
  887. 2 a 1 NULL
  888. 3 a 1 1
  889. # Null offset with default value
  890. query ITTT
  891. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  892. SELECT f1, f2, f3, lag(f1, NULL, -10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  893. FROM t
  894. ORDER BY f2 DESC, f3 DESC, f1, lag
  895. ----
  896. 7 d -5 NULL
  897. 1 c NaN NULL
  898. 2 c NaN NULL
  899. 3 c 1 NULL
  900. 4 b 1 NULL
  901. 4 b 0 NULL
  902. 1 a 1 NULL
  903. 2 a 1 NULL
  904. 2 a 1 NULL
  905. 3 a 1 NULL
  906. # Variable per row default value
  907. query ITTT
  908. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  909. SELECT f1, f2, f3, lag(f1, 1, f3) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  910. FROM t
  911. ORDER BY f2 DESC, f3 DESC, f1, lag
  912. ----
  913. 7 d -5 -5
  914. 1 c NaN NaN
  915. 2 c NaN 1
  916. 3 c 1 2
  917. 4 b 1 1
  918. 4 b 0 4
  919. 1 a 1 1
  920. 2 a 1 1
  921. 2 a 1 2
  922. 3 a 1 2
  923. # reduce_elision code path
  924. # Default offset
  925. query II
  926. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  927. SELECT f1, lag(f1) OVER (PARTITION BY f1, f2)
  928. FROM (SELECT DISTINCT f1, f2 FROM t) q
  929. ----
  930. 1 NULL
  931. 3 NULL
  932. query II
  933. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  934. SELECT f1, lag(f1, 1) OVER (PARTITION BY f1, f2)
  935. FROM (SELECT DISTINCT f1, f2 FROM t) q
  936. ----
  937. 1 NULL
  938. 3 NULL
  939. # Zero offset
  940. query II
  941. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  942. SELECT f1, lag(f1, 0) OVER (PARTITION BY f1, f2)
  943. FROM (SELECT DISTINCT f1, f2 FROM t) q
  944. ----
  945. 1 1
  946. 3 3
  947. # Negative offset
  948. query II
  949. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  950. SELECT f1, lag(f1, -1) OVER (PARTITION BY f1, f2)
  951. FROM (SELECT DISTINCT f1, f2 FROM t) q
  952. ----
  953. 1 NULL
  954. 3 NULL
  955. # Default value with offset 1
  956. query II
  957. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  958. SELECT f1, lag(f1, 1, 10) OVER (PARTITION BY f1, f2)
  959. FROM (SELECT DISTINCT f1, f2 FROM t) q
  960. ----
  961. 1 10
  962. 3 10
  963. # Default value with offset 0
  964. query II
  965. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  966. SELECT f1, lag(f1, 0, 10) OVER (PARTITION BY f1, f2)
  967. FROM (SELECT DISTINCT f1, f2 FROM t) q
  968. ----
  969. 1 1
  970. 3 3
  971. # Complex expression
  972. query II
  973. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  974. SELECT f1, lag(f1 * f2, 0, 10) OVER (PARTITION BY f1, f2)
  975. FROM (SELECT DISTINCT f1, f2 FROM t) q
  976. ----
  977. 1 2
  978. 3 12
  979. query II
  980. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  981. SELECT f1, lag(f1 * f2, 1, f1 * f2 + 1) OVER (PARTITION BY f1, f2)
  982. FROM (SELECT DISTINCT f1, f2 FROM t) q
  983. ----
  984. 1 3
  985. 3 13
  986. # Complex offset
  987. query II
  988. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  989. SELECT f1, lag(f1 * f2, f1 - f1) OVER (PARTITION BY f1, f2)
  990. FROM (SELECT DISTINCT f1, f2 FROM t) q
  991. ----
  992. 1 2
  993. 3 12
  994. query II rowsort
  995. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  996. SELECT f1, lag(f1 * f2, f1 - 1) OVER (PARTITION BY f1, f2)
  997. FROM (SELECT DISTINCT f1, f2 FROM t) q
  998. ----
  999. 3 NULL
  1000. 1 2
  1001. query II
  1002. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  1003. SELECT f1, lag(f1 * f2, f2 - 2 * f1, f2) OVER (PARTITION BY f1, f2)
  1004. FROM (SELECT DISTINCT f1, f2 FROM t) q
  1005. ----
  1006. 1 2
  1007. 3 4
  1008. # Complex default value
  1009. query II
  1010. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  1011. SELECT f1, lag(f1, 0, f1 * f2) OVER (PARTITION BY f1, f2)
  1012. FROM (SELECT DISTINCT f1, f2 FROM t) q
  1013. ----
  1014. 1 1
  1015. 3 3
  1016. query II
  1017. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  1018. SELECT f1, lag(f1, 1, f1 * f2) OVER (PARTITION BY f1, f2)
  1019. FROM (SELECT DISTINCT f1, f2 FROM t) q
  1020. ----
  1021. 1 2
  1022. 3 12
  1023. ## lead
  1024. # Simple cases
  1025. query TT
  1026. WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
  1027. SELECT lead(x) OVER (ORDER BY x), x FROM t
  1028. ORDER BY x, lead
  1029. ----
  1030. b a
  1031. c b
  1032. NULL c
  1033. query TT
  1034. WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'))
  1035. SELECT lead(x) OVER (ORDER BY x), x FROM t
  1036. ORDER BY x, lead
  1037. ----
  1038. b a
  1039. b b
  1040. c b
  1041. NULL c
  1042. query TT
  1043. WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'), ('c'))
  1044. SELECT lead(x) OVER (ORDER BY x), x FROM t
  1045. ORDER BY x, lead
  1046. ----
  1047. b a
  1048. b b
  1049. c b
  1050. c c
  1051. NULL c
  1052. query TT
  1053. WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
  1054. SELECT lead(x) OVER (ORDER BY x DESC), x FROM t
  1055. ORDER BY x, lead
  1056. ----
  1057. NULL a
  1058. a b
  1059. b c
  1060. query TT
  1061. WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'))
  1062. SELECT lead(x) OVER (ORDER BY x DESC), x FROM t
  1063. ORDER BY x, lead
  1064. ----
  1065. NULL a
  1066. a b
  1067. b b
  1068. b c
  1069. query TT
  1070. WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'), ('c'))
  1071. SELECT lead(x) OVER (ORDER BY x DESC), x FROM t
  1072. ORDER BY x, lead
  1073. ----
  1074. NULL a
  1075. a b
  1076. b b
  1077. b c
  1078. c c
  1079. query TT
  1080. WITH t (x, y) AS (VALUES ('a', 98), ('b', 99), ('c', 98))
  1081. SELECT lead(x) OVER (PARTITION BY y ORDER BY x), x FROM t
  1082. ORDER BY x, lead
  1083. ----
  1084. c a
  1085. NULL b
  1086. NULL c
  1087. query TT
  1088. WITH t (x, y) AS (VALUES ('a', 98), ('b', 99), ('c', 98), ('a', 98), ('a', 99))
  1089. SELECT lead(x) OVER (PARTITION BY y ORDER BY x), x FROM t
  1090. ORDER BY x, lead
  1091. ----
  1092. a a
  1093. b a
  1094. c a
  1095. NULL b
  1096. NULL c
  1097. query TT
  1098. WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
  1099. SELECT lead(x) OVER (PARTITION BY y ORDER BY x DESC), x FROM t
  1100. ORDER BY x, lead
  1101. ----
  1102. NULL a
  1103. NULL b
  1104. a c
  1105. query TT
  1106. WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
  1107. SELECT lead(x) OVER (PARTITION BY x ORDER BY x), x FROM t
  1108. ORDER BY x, lead
  1109. ----
  1110. NULL a
  1111. NULL b
  1112. NULL c
  1113. query TT
  1114. WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
  1115. SELECT lead(a1.x) OVER (PARTITION BY NULL ORDER BY 10000) AS q, a1.x
  1116. FROM t AS a1, t AS a2
  1117. ORDER BY q DESC, a1.x DESC
  1118. ----
  1119. NULL c
  1120. c c
  1121. c c
  1122. c b
  1123. b b
  1124. b b
  1125. b a
  1126. a a
  1127. a a
  1128. query ITTT
  1129. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1130. SELECT f1, f2, f3, lead(f1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1131. FROM t
  1132. ORDER BY f2 DESC, f3 DESC, f1, lead
  1133. ----
  1134. 7 d -5 NULL
  1135. 1 c NaN 2
  1136. 2 c NaN 3
  1137. 3 c 1 NULL
  1138. 4 b 1 4
  1139. 4 b 0 NULL
  1140. 1 a 1 2
  1141. 2 a 1 2
  1142. 2 a 1 3
  1143. 3 a 1 NULL
  1144. query ITTT
  1145. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1146. SELECT f1, f2, f3, lead(f1, 1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1147. FROM t
  1148. ORDER BY f2 DESC, f3 DESC, f1, lead
  1149. ----
  1150. 7 d -5 NULL
  1151. 1 c NaN 2
  1152. 2 c NaN 3
  1153. 3 c 1 NULL
  1154. 4 b 1 4
  1155. 4 b 0 NULL
  1156. 1 a 1 2
  1157. 2 a 1 2
  1158. 2 a 1 3
  1159. 3 a 1 NULL
  1160. query ITTT
  1161. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1162. SELECT f1, f2, f3, lead(f1, 1, NULL) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1163. FROM t
  1164. ORDER BY f2 DESC, f3 DESC, f1, lead
  1165. ----
  1166. 7 d -5 NULL
  1167. 1 c NaN 2
  1168. 2 c NaN 3
  1169. 3 c 1 NULL
  1170. 4 b 1 4
  1171. 4 b 0 NULL
  1172. 1 a 1 2
  1173. 2 a 1 2
  1174. 2 a 1 3
  1175. 3 a 1 NULL
  1176. # With default value
  1177. query ITTT
  1178. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1179. SELECT f1, f2, f3, lead(f1, 1, -1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1180. FROM t
  1181. ORDER BY f2 DESC, f3 DESC, f1, lead
  1182. ----
  1183. 7 d -5 -1
  1184. 1 c NaN 2
  1185. 2 c NaN 3
  1186. 3 c 1 -1
  1187. 4 b 1 4
  1188. 4 b 0 -1
  1189. 1 a 1 2
  1190. 2 a 1 2
  1191. 2 a 1 3
  1192. 3 a 1 -1
  1193. # Complex expressions
  1194. query ITTT
  1195. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1196. SELECT f1, f2, f3, lead(f1 + coalesce(nullif(f3, 'NaN'), -10)) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1197. FROM t
  1198. ORDER BY f2 DESC, f3 DESC, f1, lead
  1199. ----
  1200. 7 d -5 NULL
  1201. 1 c NaN -8
  1202. 2 c NaN 4
  1203. 3 c 1 NULL
  1204. 4 b 1 4
  1205. 4 b 0 NULL
  1206. 1 a 1 3
  1207. 2 a 1 3
  1208. 2 a 1 4
  1209. 3 a 1 NULL
  1210. # Nulls in the first argument
  1211. query ITTT
  1212. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1213. SELECT f1, f2, f3, lead(NULL::int) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1214. FROM t
  1215. ORDER BY f2 DESC, f3 DESC, f1, lead
  1216. ----
  1217. 7 d -5 NULL
  1218. 1 c NaN NULL
  1219. 2 c NaN NULL
  1220. 3 c 1 NULL
  1221. 4 b 1 NULL
  1222. 4 b 0 NULL
  1223. 1 a 1 NULL
  1224. 2 a 1 NULL
  1225. 2 a 1 NULL
  1226. 3 a 1 NULL
  1227. query ITTT
  1228. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1229. SELECT f1, f2, f3, lead(nullif(f1, 4)) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1230. FROM t
  1231. ORDER BY f2 DESC, f3 DESC, f1, lead
  1232. ----
  1233. 7 d -5 NULL
  1234. 1 c NaN 2
  1235. 2 c NaN 3
  1236. 3 c 1 NULL
  1237. 4 b 1 NULL
  1238. 4 b 0 NULL
  1239. 1 a 1 2
  1240. 2 a 1 2
  1241. 2 a 1 3
  1242. 3 a 1 NULL
  1243. # Nulls in the first argument with a default value in the third argument
  1244. query ITTT
  1245. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1246. SELECT f1, f2, f3, lead(NULL::int, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1247. FROM t
  1248. ORDER BY f2 DESC, f3 DESC, f1, lead
  1249. ----
  1250. 7 d -5 NULL
  1251. 1 c NaN NULL
  1252. 2 c NaN NULL
  1253. 3 c 1 NULL
  1254. 4 b 1 NULL
  1255. 4 b 0 NULL
  1256. 1 a 1 NULL
  1257. 2 a 1 NULL
  1258. 2 a 1 NULL
  1259. 3 a 1 NULL
  1260. # Zero offset
  1261. query ITTT
  1262. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1263. SELECT f1, f2, f3, lead(f1, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1264. FROM t
  1265. ORDER BY f2 DESC, f3 DESC, f1, lead
  1266. ----
  1267. 7 d -5 7
  1268. 1 c NaN 1
  1269. 2 c NaN 2
  1270. 3 c 1 3
  1271. 4 b 1 4
  1272. 4 b 0 4
  1273. 1 a 1 1
  1274. 2 a 1 2
  1275. 2 a 1 2
  1276. 3 a 1 3
  1277. query ITTT
  1278. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1279. SELECT f1, f2, f3, lead(f1 + f3, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1280. FROM t
  1281. ORDER BY f2 DESC, f3 DESC, f1, lead
  1282. ----
  1283. 7 d -5 2
  1284. 1 c NaN NaN
  1285. 2 c NaN NaN
  1286. 3 c 1 4
  1287. 4 b 1 5
  1288. 4 b 0 4
  1289. 1 a 1 2
  1290. 2 a 1 3
  1291. 2 a 1 3
  1292. 3 a 1 4
  1293. # Positive offsets
  1294. query ITTT
  1295. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1296. SELECT f1, f2, f3, lead(f1, 2) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1297. FROM t
  1298. ORDER BY f2 DESC, f3 DESC, f1, lead
  1299. ----
  1300. 7 d -5 NULL
  1301. 1 c NaN 3
  1302. 2 c NaN NULL
  1303. 3 c 1 NULL
  1304. 4 b 1 NULL
  1305. 4 b 0 NULL
  1306. 1 a 1 2
  1307. 2 a 1 3
  1308. 2 a 1 NULL
  1309. 3 a 1 NULL
  1310. query ITTT
  1311. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1312. SELECT f1, f2, f3, lead(f1 + f3, 2) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1313. FROM t
  1314. ORDER BY f2 DESC, f3 DESC, f1, lead
  1315. ----
  1316. 7 d -5 NULL
  1317. 1 c NaN 4
  1318. 2 c NaN NULL
  1319. 3 c 1 NULL
  1320. 4 b 1 NULL
  1321. 4 b 0 NULL
  1322. 1 a 1 3
  1323. 2 a 1 4
  1324. 2 a 1 NULL
  1325. 3 a 1 NULL
  1326. # Out of range positive offsets
  1327. query ITTT
  1328. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1329. SELECT f1, f2, f3, lead(f1, 10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1330. FROM t
  1331. ORDER BY f2 DESC, f3 DESC, f1, lead
  1332. ----
  1333. 7 d -5 NULL
  1334. 1 c NaN NULL
  1335. 2 c NaN NULL
  1336. 3 c 1 NULL
  1337. 4 b 1 NULL
  1338. 4 b 0 NULL
  1339. 1 a 1 NULL
  1340. 2 a 1 NULL
  1341. 2 a 1 NULL
  1342. 3 a 1 NULL
  1343. query ITTT
  1344. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1345. SELECT f1, f2, f3, lead(f1 + f3, 10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1346. FROM t
  1347. ORDER BY f2 DESC, f3 DESC, f1, lead
  1348. ----
  1349. 7 d -5 NULL
  1350. 1 c NaN NULL
  1351. 2 c NaN NULL
  1352. 3 c 1 NULL
  1353. 4 b 1 NULL
  1354. 4 b 0 NULL
  1355. 1 a 1 NULL
  1356. 2 a 1 NULL
  1357. 2 a 1 NULL
  1358. 3 a 1 NULL
  1359. query ITTT
  1360. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1361. SELECT f1, f2, f3, lead(f1 + f3, 10, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1362. FROM t
  1363. ORDER BY f2 DESC, f3 DESC, f1, lead
  1364. ----
  1365. 7 d -5 0
  1366. 1 c NaN 0
  1367. 2 c NaN 0
  1368. 3 c 1 0
  1369. 4 b 1 0
  1370. 4 b 0 0
  1371. 1 a 1 0
  1372. 2 a 1 0
  1373. 2 a 1 0
  1374. 3 a 1 0
  1375. # Negative offsets
  1376. query ITTT
  1377. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1378. SELECT f1, f2, f3, lead(f1, -1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1379. FROM t
  1380. ORDER BY f2 DESC, f3 DESC, f1, lead
  1381. ----
  1382. 7 d -5 NULL
  1383. 1 c NaN NULL
  1384. 2 c NaN 1
  1385. 3 c 1 2
  1386. 4 b 1 NULL
  1387. 4 b 0 4
  1388. 1 a 1 NULL
  1389. 2 a 1 1
  1390. 2 a 1 2
  1391. 3 a 1 2
  1392. query ITTT
  1393. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1394. SELECT f1, f2, f3, lead(f1 + f3, -1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1395. FROM t
  1396. ORDER BY f2 DESC, f3 DESC, f1, lead
  1397. ----
  1398. 7 d -5 NULL
  1399. 1 c NaN NULL
  1400. 2 c NaN NaN
  1401. 3 c 1 NaN
  1402. 4 b 1 NULL
  1403. 4 b 0 5
  1404. 1 a 1 NULL
  1405. 2 a 1 2
  1406. 2 a 1 3
  1407. 3 a 1 3
  1408. query ITTT
  1409. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1410. SELECT f1, f2, f3, lead(f1 + f3, -2) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1411. FROM t
  1412. ORDER BY f2 DESC, f3 DESC, f1, lead
  1413. ----
  1414. 7 d -5 NULL
  1415. 1 c NaN NULL
  1416. 2 c NaN NULL
  1417. 3 c 1 NaN
  1418. 4 b 1 NULL
  1419. 4 b 0 NULL
  1420. 1 a 1 NULL
  1421. 2 a 1 2
  1422. 2 a 1 NULL
  1423. 3 a 1 3
  1424. # Out of range negative offsets
  1425. query ITTT
  1426. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1427. SELECT f1, f2, f3, lead(f1, -10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1428. FROM t
  1429. ORDER BY f2 DESC, f3 DESC, f1, lead
  1430. ----
  1431. 7 d -5 NULL
  1432. 1 c NaN NULL
  1433. 2 c NaN NULL
  1434. 3 c 1 NULL
  1435. 4 b 1 NULL
  1436. 4 b 0 NULL
  1437. 1 a 1 NULL
  1438. 2 a 1 NULL
  1439. 2 a 1 NULL
  1440. 3 a 1 NULL
  1441. query ITTT
  1442. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1443. SELECT f1, f2, f3, lead(f1 + f3, -10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1444. FROM t
  1445. ORDER BY f2 DESC, f3 DESC, f1, lead
  1446. ----
  1447. 7 d -5 NULL
  1448. 1 c NaN NULL
  1449. 2 c NaN NULL
  1450. 3 c 1 NULL
  1451. 4 b 1 NULL
  1452. 4 b 0 NULL
  1453. 1 a 1 NULL
  1454. 2 a 1 NULL
  1455. 2 a 1 NULL
  1456. 3 a 1 NULL
  1457. query ITTT
  1458. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1459. SELECT f1, f2, f3, lead(f1, -10, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1460. FROM t
  1461. ORDER BY f2 DESC, f3 DESC, f1, lead
  1462. ----
  1463. 7 d -5 0
  1464. 1 c NaN 0
  1465. 2 c NaN 0
  1466. 3 c 1 0
  1467. 4 b 1 0
  1468. 4 b 0 0
  1469. 1 a 1 0
  1470. 2 a 1 0
  1471. 2 a 1 0
  1472. 3 a 1 0
  1473. # Variable per row offsets
  1474. query ITTT
  1475. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1476. SELECT f1, f2, f3, lead(f1, f1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1477. FROM t
  1478. ORDER BY f2 DESC, f3 DESC, f1, lead
  1479. ----
  1480. 7 d -5 NULL
  1481. 1 c NaN 2
  1482. 2 c NaN NULL
  1483. 3 c 1 NULL
  1484. 4 b 1 NULL
  1485. 4 b 0 NULL
  1486. 1 a 1 2
  1487. 2 a 1 3
  1488. 2 a 1 NULL
  1489. 3 a 1 NULL
  1490. query ITTT
  1491. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1492. SELECT f1, f2, f3, lead(f1, f1 - 1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1493. FROM t
  1494. ORDER BY f2 DESC, f3 DESC, f1, lead
  1495. ----
  1496. 7 d -5 NULL
  1497. 1 c NaN 1
  1498. 2 c NaN 3
  1499. 3 c 1 NULL
  1500. 4 b 1 NULL
  1501. 4 b 0 NULL
  1502. 1 a 1 1
  1503. 2 a 1 2
  1504. 2 a 1 3
  1505. 3 a 1 NULL
  1506. # Null offsets
  1507. query ITTT
  1508. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1509. SELECT f1, f2, f3, lead(f1, NULL) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1510. FROM t
  1511. ORDER BY f2 DESC, f3 DESC, f1, lead
  1512. ----
  1513. 7 d -5 NULL
  1514. 1 c NaN NULL
  1515. 2 c NaN NULL
  1516. 3 c 1 NULL
  1517. 4 b 1 NULL
  1518. 4 b 0 NULL
  1519. 1 a 1 NULL
  1520. 2 a 1 NULL
  1521. 2 a 1 NULL
  1522. 3 a 1 NULL
  1523. query ITTT
  1524. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1525. SELECT f1, f2, f3, lead(f1, nullif(f1, 1)) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1526. FROM t
  1527. ORDER BY f2 DESC, f3 DESC, f1, lead
  1528. ----
  1529. 7 d -5 NULL
  1530. 1 c NaN NULL
  1531. 2 c NaN NULL
  1532. 3 c 1 NULL
  1533. 4 b 1 NULL
  1534. 4 b 0 NULL
  1535. 1 a 1 NULL
  1536. 2 a 1 3
  1537. 2 a 1 NULL
  1538. 3 a 1 NULL
  1539. # Null offset with default value
  1540. query ITTT
  1541. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1542. SELECT f1, f2, f3, lead(f1, NULL, -10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1543. FROM t
  1544. ORDER BY f2 DESC, f3 DESC, f1, lead
  1545. ----
  1546. 7 d -5 NULL
  1547. 1 c NaN NULL
  1548. 2 c NaN NULL
  1549. 3 c 1 NULL
  1550. 4 b 1 NULL
  1551. 4 b 0 NULL
  1552. 1 a 1 NULL
  1553. 2 a 1 NULL
  1554. 2 a 1 NULL
  1555. 3 a 1 NULL
  1556. # Variable per row default value
  1557. query ITTT
  1558. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1.0), (2, 'a', 1.0), (2, 'a', 1.0), (3, 'a', 1.0), (4, 'b', 0), (4, 'b', 1), (1, 'c', 'NaN'), (2, 'c', 'NaN'), (3, 'c', 1.0), (7, 'd', -5.0))
  1559. SELECT f1, f2, f3, lead(f1, 1, f3) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
  1560. FROM t
  1561. ORDER BY f2 DESC, f3 DESC, f1, lead
  1562. ----
  1563. 7 d -5 -5
  1564. 1 c NaN 2
  1565. 2 c NaN 3
  1566. 3 c 1 1
  1567. 4 b 1 4
  1568. 4 b 0 0
  1569. 1 a 1 2
  1570. 2 a 1 2
  1571. 2 a 1 3
  1572. 3 a 1 1
  1573. # reduce_elision code path
  1574. # Default offset
  1575. query II
  1576. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  1577. SELECT f1, lead(f1) OVER (PARTITION BY f1, f2)
  1578. FROM (SELECT DISTINCT f1, f2 FROM t) q
  1579. ORDER BY 1, 2
  1580. ----
  1581. 1 NULL
  1582. 3 NULL
  1583. query II
  1584. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  1585. SELECT f1, lead(f1, 1) OVER (PARTITION BY f1, f2)
  1586. FROM (SELECT DISTINCT f1, f2 FROM t) q
  1587. ORDER BY 1, 2
  1588. ----
  1589. 1 NULL
  1590. 3 NULL
  1591. # Zero offset
  1592. query II
  1593. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  1594. SELECT f1, lead(f1, 0) OVER (PARTITION BY f1, f2)
  1595. FROM (SELECT DISTINCT f1, f2 FROM t) q
  1596. ORDER BY 1, 2
  1597. ----
  1598. 1 1
  1599. 3 3
  1600. # Negative offset
  1601. query II
  1602. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  1603. SELECT f1, lead(f1, -1) OVER (PARTITION BY f1, f2)
  1604. FROM (SELECT DISTINCT f1, f2 FROM t) q
  1605. ORDER BY 1, 2
  1606. ----
  1607. 1 NULL
  1608. 3 NULL
  1609. # Default value with offset 1
  1610. query II
  1611. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  1612. SELECT f1, lead(f1, 1, 10) OVER (PARTITION BY f1, f2)
  1613. FROM (SELECT DISTINCT f1, f2 FROM t) q
  1614. ORDER BY 1, 2
  1615. ----
  1616. 1 10
  1617. 3 10
  1618. # Default value with offset 0
  1619. query II
  1620. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  1621. SELECT f1, lead(f1, 0, 10) OVER (PARTITION BY f1, f2)
  1622. FROM (SELECT DISTINCT f1, f2 FROM t) q
  1623. ORDER BY 1, 2
  1624. ----
  1625. 1 1
  1626. 3 3
  1627. # Complex expression
  1628. query II
  1629. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  1630. SELECT f1, lead(f1 * f2, 0, 10) OVER (PARTITION BY f1, f2)
  1631. FROM (SELECT DISTINCT f1, f2 FROM t) q
  1632. ORDER BY 1, 2
  1633. ----
  1634. 1 2
  1635. 3 12
  1636. query II
  1637. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  1638. SELECT f1, lead(f1 * f2, 1, f1 * f2 + 1) OVER (PARTITION BY f1, f2)
  1639. FROM (SELECT DISTINCT f1, f2 FROM t) q
  1640. ORDER BY 1, 2
  1641. ----
  1642. 1 3
  1643. 3 13
  1644. # Complex offset
  1645. query II
  1646. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  1647. SELECT f1, lead(f1 * f2, f1 - f1) OVER (PARTITION BY f1, f2)
  1648. FROM (SELECT DISTINCT f1, f2 FROM t) q
  1649. ORDER BY 1, 2
  1650. ----
  1651. 1 2
  1652. 3 12
  1653. query II
  1654. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  1655. SELECT f1, lead(f1 * f2, f1 - 1) OVER (PARTITION BY f1, f2)
  1656. FROM (SELECT DISTINCT f1, f2 FROM t) q
  1657. ORDER BY 1, 2
  1658. ----
  1659. 1 2
  1660. 3 NULL
  1661. query II
  1662. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  1663. SELECT f1, lead(f1 * f2, f2 - 2 * f1, f2) OVER (PARTITION BY f1, f2)
  1664. FROM (SELECT DISTINCT f1, f2 FROM t) q
  1665. ORDER BY 1, 2
  1666. ----
  1667. 1 2
  1668. 3 4
  1669. # Complex default value
  1670. query II
  1671. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  1672. SELECT f1, lead(f1, 0, f1 * f2) OVER (PARTITION BY f1, f2)
  1673. FROM (SELECT DISTINCT f1, f2 FROM t) q
  1674. ORDER BY 1, 2
  1675. ----
  1676. 1 1
  1677. 3 3
  1678. query II
  1679. WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
  1680. SELECT f1, lead(f1, 1, f1 * f2) OVER (PARTITION BY f1, f2)
  1681. FROM (SELECT DISTINCT f1, f2 FROM t) q
  1682. ORDER BY 1, 2
  1683. ----
  1684. 1 2
  1685. 3 12
  1686. ## window frames
  1687. # Invalid frame start
  1688. query error frame start cannot be UNBOUNDED FOLLOWING
  1689. SELECT row_number() OVER (ROWS UNBOUNDED FOLLOWING)
  1690. # Invalid frame end
  1691. query error frame end cannot be UNBOUNDED PRECEDING
  1692. SELECT row_number() OVER (ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED PRECEDING)
  1693. # End frame can't be of a type that comes before the start bound
  1694. query error frame starting from current row cannot have preceding rows
  1695. SELECT row_number() OVER (ROWS BETWEEN CURRENT ROW AND 1 PRECEDING)
  1696. query error frame starting from following row cannot have preceding rows
  1697. SELECT row_number() OVER (ROWS BETWEEN 1 FOLLOWING AND 1 PRECEDING)
  1698. query error frame starting from following row cannot have preceding rows
  1699. SELECT row_number() OVER (ROWS BETWEEN 1 FOLLOWING AND CURRENT ROW)
  1700. # But end offsets can come before start offsets
  1701. query I
  1702. SELECT row_number() OVER (ROWS BETWEEN 1 PRECEDING AND 2 PRECEDING)
  1703. ----
  1704. 1
  1705. query I
  1706. SELECT row_number() OVER (ROWS BETWEEN 2 FOLLOWING AND 1 FOLLOWING)
  1707. ----
  1708. 1
  1709. # Negative offsets are not allowed
  1710. # Our error message is different from Postgres, so it's not checked here
  1711. query error
  1712. SELECT row_number() OVER (ROWS -1 PRECEDING)
  1713. query error
  1714. SELECT row_number() OVER (ROWS -1 FOLLOWING)
  1715. # Current implementation restrictions
  1716. # RANGE is not supported outside of the default frame
  1717. query error RANGE in non-default window frames not yet supported
  1718. SELECT row_number() OVER (RANGE BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
  1719. query error RANGE in non-default window frames not yet supported
  1720. SELECT row_number() OVER (RANGE BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING)
  1721. query error RANGE in non-default window frames not yet supported
  1722. SELECT row_number() OVER (RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
  1723. query error RANGE in non-default window frames not yet supported
  1724. SELECT row_number() OVER (RANGE BETWEEN 1 PRECEDING AND 1 PRECEDING)
  1725. query error RANGE in non-default window frames not yet supported
  1726. SELECT row_number() OVER (RANGE BETWEEN 1 PRECEDING AND CURRENT ROW)
  1727. query error RANGE in non-default window frames not yet supported
  1728. SELECT row_number() OVER (RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING)
  1729. query error RANGE in non-default window frames not yet supported
  1730. SELECT row_number() OVER (RANGE BETWEEN 1 PRECEDING AND UNBOUNDED FOLLOWING)
  1731. query error RANGE in non-default window frames not yet supported
  1732. SELECT row_number() OVER (RANGE BETWEEN CURRENT ROW AND CURRENT ROW)
  1733. query error RANGE in non-default window frames not yet supported
  1734. SELECT row_number() OVER (RANGE BETWEEN CURRENT ROW AND 1 FOLLOWING)
  1735. query error RANGE in non-default window frames not yet supported
  1736. SELECT row_number() OVER (RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
  1737. query error RANGE in non-default window frames not yet supported
  1738. SELECT row_number() OVER (RANGE BETWEEN 1 FOLLOWING AND 1 FOLLOWING)
  1739. query error RANGE in non-default window frames not yet supported
  1740. SELECT row_number() OVER (RANGE BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)
  1741. # Default window frame works fine
  1742. query I
  1743. SELECT row_number() OVER ()
  1744. ----
  1745. 1
  1746. query I
  1747. SELECT row_number() OVER (RANGE UNBOUNDED PRECEDING)
  1748. ----
  1749. 1
  1750. query I
  1751. SELECT row_number() OVER (RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
  1752. ----
  1753. 1
  1754. # GROUPS is not supported at all
  1755. query error GROUPS in window frames not yet supported
  1756. SELECT row_number() OVER (GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
  1757. query error GROUPS in window frames not yet supported
  1758. SELECT row_number() OVER (GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
  1759. query error GROUPS in window frames not yet supported
  1760. SELECT row_number() OVER (GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING)
  1761. query error GROUPS in window frames not yet supported
  1762. SELECT row_number() OVER (GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
  1763. query error GROUPS in window frames not yet supported
  1764. SELECT row_number() OVER (GROUPS BETWEEN 1 PRECEDING AND 1 PRECEDING)
  1765. query error GROUPS in window frames not yet supported
  1766. SELECT row_number() OVER (GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW)
  1767. query error GROUPS in window frames not yet supported
  1768. SELECT row_number() OVER (GROUPS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
  1769. query error GROUPS in window frames not yet supported
  1770. SELECT row_number() OVER (GROUPS BETWEEN 1 PRECEDING AND UNBOUNDED FOLLOWING)
  1771. query error GROUPS in window frames not yet supported
  1772. SELECT row_number() OVER (GROUPS BETWEEN CURRENT ROW AND CURRENT ROW)
  1773. query error GROUPS in window frames not yet supported
  1774. SELECT row_number() OVER (GROUPS BETWEEN CURRENT ROW AND 1 FOLLOWING)
  1775. query error GROUPS in window frames not yet supported
  1776. SELECT row_number() OVER (GROUPS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
  1777. query error GROUPS in window frames not yet supported
  1778. SELECT row_number() OVER (GROUPS BETWEEN 1 FOLLOWING AND 1 FOLLOWING)
  1779. query error GROUPS in window frames not yet supported
  1780. SELECT row_number() OVER (GROUPS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)
  1781. ## first_value
  1782. # Default frame (RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
  1783. query ITII
  1784. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  1785. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3)
  1786. FROM t
  1787. ORDER BY f2, f3, f1, first_value
  1788. ----
  1789. 1 a 1 1
  1790. 2 a 2 1
  1791. 2 a 3 1
  1792. 3 a 4 1
  1793. 4 b 5 4
  1794. 4 b 6 4
  1795. 1 c 7 1
  1796. 2 c 8 1
  1797. 3 c 9 1
  1798. 7 d 10 7
  1799. # ROWS BETWEEN UNBOUNDED PRECEDING AND x PRECEDING
  1800. query ITII
  1801. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  1802. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING)
  1803. FROM t
  1804. ORDER BY f2, f3, f1, first_value
  1805. ----
  1806. 1 a 1 1
  1807. 2 a 2 1
  1808. 2 a 3 1
  1809. 3 a 4 1
  1810. 4 b 5 4
  1811. 4 b 6 4
  1812. 1 c 7 1
  1813. 2 c 8 1
  1814. 3 c 9 1
  1815. 7 d 10 7
  1816. query ITII
  1817. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  1818. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
  1819. FROM t
  1820. ORDER BY f2, f3, f1, first_value
  1821. ----
  1822. 1 a 1 NULL
  1823. 2 a 2 1
  1824. 2 a 3 1
  1825. 3 a 4 1
  1826. 4 b 5 NULL
  1827. 4 b 6 4
  1828. 1 c 7 NULL
  1829. 2 c 8 1
  1830. 3 c 9 1
  1831. 7 d 10 NULL
  1832. query ITII
  1833. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  1834. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND 2 PRECEDING)
  1835. FROM t
  1836. ORDER BY f2, f3, f1, first_value
  1837. ----
  1838. 1 a 1 NULL
  1839. 2 a 2 NULL
  1840. 2 a 3 1
  1841. 3 a 4 1
  1842. 4 b 5 NULL
  1843. 4 b 6 NULL
  1844. 1 c 7 NULL
  1845. 2 c 8 NULL
  1846. 3 c 9 1
  1847. 7 d 10 NULL
  1848. query ITII
  1849. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  1850. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND 10 PRECEDING)
  1851. FROM t
  1852. ORDER BY f2, f3, f1, first_value
  1853. ----
  1854. 1 a 1 NULL
  1855. 2 a 2 NULL
  1856. 2 a 3 NULL
  1857. 3 a 4 NULL
  1858. 4 b 5 NULL
  1859. 4 b 6 NULL
  1860. 1 c 7 NULL
  1861. 2 c 8 NULL
  1862. 3 c 9 NULL
  1863. 7 d 10 NULL
  1864. # ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
  1865. query ITII
  1866. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  1867. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
  1868. FROM t
  1869. ORDER BY f2, f3, f1, first_value
  1870. ----
  1871. 1 a 1 1
  1872. 2 a 2 1
  1873. 2 a 3 1
  1874. 3 a 4 1
  1875. 4 b 5 4
  1876. 4 b 6 4
  1877. 1 c 7 1
  1878. 2 c 8 1
  1879. 3 c 9 1
  1880. 7 d 10 7
  1881. # ROWS BETWEEN UNBOUNDED PRECEDING AND x FOLLOWING
  1882. query ITII
  1883. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  1884. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND 0 FOLLOWING)
  1885. FROM t
  1886. ORDER BY f2, f3, f1, first_value
  1887. ----
  1888. 1 a 1 1
  1889. 2 a 2 1
  1890. 2 a 3 1
  1891. 3 a 4 1
  1892. 4 b 5 4
  1893. 4 b 6 4
  1894. 1 c 7 1
  1895. 2 c 8 1
  1896. 3 c 9 1
  1897. 7 d 10 7
  1898. query ITII
  1899. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  1900. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING)
  1901. FROM t
  1902. ORDER BY f2, f3, f1, first_value
  1903. ----
  1904. 1 a 1 1
  1905. 2 a 2 1
  1906. 2 a 3 1
  1907. 3 a 4 1
  1908. 4 b 5 4
  1909. 4 b 6 4
  1910. 1 c 7 1
  1911. 2 c 8 1
  1912. 3 c 9 1
  1913. 7 d 10 7
  1914. query ITII
  1915. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  1916. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING)
  1917. FROM t
  1918. ORDER BY f2, f3, f1, first_value
  1919. ----
  1920. 1 a 1 1
  1921. 2 a 2 1
  1922. 2 a 3 1
  1923. 3 a 4 1
  1924. 4 b 5 4
  1925. 4 b 6 4
  1926. 1 c 7 1
  1927. 2 c 8 1
  1928. 3 c 9 1
  1929. 7 d 10 7
  1930. query ITII
  1931. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  1932. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND 10 FOLLOWING)
  1933. FROM t
  1934. ORDER BY f2, f3, f1, first_value
  1935. ----
  1936. 1 a 1 1
  1937. 2 a 2 1
  1938. 2 a 3 1
  1939. 3 a 4 1
  1940. 4 b 5 4
  1941. 4 b 6 4
  1942. 1 c 7 1
  1943. 2 c 8 1
  1944. 3 c 9 1
  1945. 7 d 10 7
  1946. # ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
  1947. query ITII
  1948. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  1949. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
  1950. FROM t
  1951. ORDER BY f2, f3, f1, first_value
  1952. ----
  1953. 1 a 1 1
  1954. 2 a 2 1
  1955. 2 a 3 1
  1956. 3 a 4 1
  1957. 4 b 5 4
  1958. 4 b 6 4
  1959. 1 c 7 1
  1960. 2 c 8 1
  1961. 3 c 9 1
  1962. 7 d 10 7
  1963. # ROWS BETWEEN 0 PRECEDING AND x PRECEDING
  1964. query ITII
  1965. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  1966. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING)
  1967. FROM t
  1968. ORDER BY f2, f3, f1, first_value
  1969. ----
  1970. 1 a 1 NULL
  1971. 2 a 2 NULL
  1972. 2 a 3 NULL
  1973. 3 a 4 NULL
  1974. 4 b 5 NULL
  1975. 4 b 6 NULL
  1976. 1 c 7 NULL
  1977. 2 c 8 NULL
  1978. 3 c 9 NULL
  1979. 7 d 10 NULL
  1980. query ITII
  1981. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  1982. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 PRECEDING AND 2 PRECEDING)
  1983. FROM t
  1984. ORDER BY f2, f3, f1, first_value
  1985. ----
  1986. 1 a 1 NULL
  1987. 2 a 2 NULL
  1988. 2 a 3 NULL
  1989. 3 a 4 NULL
  1990. 4 b 5 NULL
  1991. 4 b 6 NULL
  1992. 1 c 7 NULL
  1993. 2 c 8 NULL
  1994. 3 c 9 NULL
  1995. 7 d 10 NULL
  1996. query ITII
  1997. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  1998. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 PRECEDING AND 10 PRECEDING)
  1999. FROM t
  2000. ORDER BY f2, f3, f1, first_value
  2001. ----
  2002. 1 a 1 NULL
  2003. 2 a 2 NULL
  2004. 2 a 3 NULL
  2005. 3 a 4 NULL
  2006. 4 b 5 NULL
  2007. 4 b 6 NULL
  2008. 1 c 7 NULL
  2009. 2 c 8 NULL
  2010. 3 c 9 NULL
  2011. 7 d 10 NULL
  2012. # ROWS BETWEEN x PRECEDING AND 0 PRECEDING
  2013. query ITII
  2014. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2015. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 PRECEDING AND 0 PRECEDING)
  2016. FROM t
  2017. ORDER BY f2, f3, f1, first_value
  2018. ----
  2019. 1 a 1 1
  2020. 2 a 2 1
  2021. 2 a 3 2
  2022. 3 a 4 2
  2023. 4 b 5 4
  2024. 4 b 6 4
  2025. 1 c 7 1
  2026. 2 c 8 1
  2027. 3 c 9 2
  2028. 7 d 10 7
  2029. query ITII
  2030. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2031. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 PRECEDING AND 0 PRECEDING)
  2032. FROM t
  2033. ORDER BY f2, f3, f1, first_value
  2034. ----
  2035. 1 a 1 1
  2036. 2 a 2 1
  2037. 2 a 3 1
  2038. 3 a 4 2
  2039. 4 b 5 4
  2040. 4 b 6 4
  2041. 1 c 7 1
  2042. 2 c 8 1
  2043. 3 c 9 1
  2044. 7 d 10 7
  2045. query ITII
  2046. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2047. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 10 PRECEDING AND 0 PRECEDING)
  2048. FROM t
  2049. ORDER BY f2, f3, f1, first_value
  2050. ----
  2051. 1 a 1 1
  2052. 2 a 2 1
  2053. 2 a 3 1
  2054. 3 a 4 1
  2055. 4 b 5 4
  2056. 4 b 6 4
  2057. 1 c 7 1
  2058. 2 c 8 1
  2059. 3 c 9 1
  2060. 7 d 10 7
  2061. # ROWS BETWEEN x PRECEDING AND y PRECEDING, where x < y
  2062. query ITII
  2063. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2064. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING)
  2065. FROM t
  2066. ORDER BY f2, f3, f1, first_value
  2067. ----
  2068. 1 a 1 NULL
  2069. 2 a 2 NULL
  2070. 2 a 3 NULL
  2071. 3 a 4 NULL
  2072. 4 b 5 NULL
  2073. 4 b 6 NULL
  2074. 1 c 7 NULL
  2075. 2 c 8 NULL
  2076. 3 c 9 NULL
  2077. 7 d 10 NULL
  2078. query ITII
  2079. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2080. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 PRECEDING AND 2 PRECEDING)
  2081. FROM t
  2082. ORDER BY f2, f3, f1, first_value
  2083. ----
  2084. 1 a 1 NULL
  2085. 2 a 2 NULL
  2086. 2 a 3 NULL
  2087. 3 a 4 NULL
  2088. 4 b 5 NULL
  2089. 4 b 6 NULL
  2090. 1 c 7 NULL
  2091. 2 c 8 NULL
  2092. 3 c 9 NULL
  2093. 7 d 10 NULL
  2094. # ROWS BETWEEN x PRECEDING AND y PRECEDING, where x > y
  2095. query ITII
  2096. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2097. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 PRECEDING AND 0 PRECEDING)
  2098. FROM t
  2099. ORDER BY f2, f3, f1, first_value
  2100. ----
  2101. 1 a 1 1
  2102. 2 a 2 1
  2103. 2 a 3 2
  2104. 3 a 4 2
  2105. 4 b 5 4
  2106. 4 b 6 4
  2107. 1 c 7 1
  2108. 2 c 8 1
  2109. 3 c 9 2
  2110. 7 d 10 7
  2111. query ITII
  2112. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2113. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING)
  2114. FROM t
  2115. ORDER BY f2, f3, f1, first_value
  2116. ----
  2117. 1 a 1 NULL
  2118. 2 a 2 1
  2119. 2 a 3 1
  2120. 3 a 4 2
  2121. 4 b 5 NULL
  2122. 4 b 6 4
  2123. 1 c 7 NULL
  2124. 2 c 8 1
  2125. 3 c 9 1
  2126. 7 d 10 NULL
  2127. # ROWS BETWEEN x PRECEDING AND y PRECEDING, where x == y
  2128. query ITII
  2129. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2130. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 PRECEDING AND 0 PRECEDING)
  2131. FROM t
  2132. ORDER BY f2, f3, f1, first_value
  2133. ----
  2134. 1 a 1 1
  2135. 2 a 2 2
  2136. 2 a 3 2
  2137. 3 a 4 3
  2138. 4 b 5 4
  2139. 4 b 6 4
  2140. 1 c 7 1
  2141. 2 c 8 2
  2142. 3 c 9 3
  2143. 7 d 10 7
  2144. query ITII
  2145. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2146. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
  2147. FROM t
  2148. ORDER BY f2, f3, f1, first_value
  2149. ----
  2150. 1 a 1 NULL
  2151. 2 a 2 1
  2152. 2 a 3 2
  2153. 3 a 4 2
  2154. 4 b 5 NULL
  2155. 4 b 6 4
  2156. 1 c 7 NULL
  2157. 2 c 8 1
  2158. 3 c 9 2
  2159. 7 d 10 NULL
  2160. query ITII
  2161. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2162. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 PRECEDING AND 2 PRECEDING)
  2163. FROM t
  2164. ORDER BY f2, f3, f1, first_value
  2165. ----
  2166. 1 a 1 NULL
  2167. 2 a 2 NULL
  2168. 2 a 3 1
  2169. 3 a 4 2
  2170. 4 b 5 NULL
  2171. 4 b 6 NULL
  2172. 1 c 7 NULL
  2173. 2 c 8 NULL
  2174. 3 c 9 1
  2175. 7 d 10 NULL
  2176. query ITII
  2177. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2178. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 10 PRECEDING AND 10 PRECEDING)
  2179. FROM t
  2180. ORDER BY f2, f3, f1, first_value
  2181. ----
  2182. 1 a 1 NULL
  2183. 2 a 2 NULL
  2184. 2 a 3 NULL
  2185. 3 a 4 NULL
  2186. 4 b 5 NULL
  2187. 4 b 6 NULL
  2188. 1 c 7 NULL
  2189. 2 c 8 NULL
  2190. 3 c 9 NULL
  2191. 7 d 10 NULL
  2192. # ROWS BETWEEN x PRECEDING AND CURRENT ROW
  2193. query ITII
  2194. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2195. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 PRECEDING AND CURRENT ROW)
  2196. FROM t
  2197. ORDER BY f2, f3, f1, first_value
  2198. ----
  2199. 1 a 1 1
  2200. 2 a 2 2
  2201. 2 a 3 2
  2202. 3 a 4 3
  2203. 4 b 5 4
  2204. 4 b 6 4
  2205. 1 c 7 1
  2206. 2 c 8 2
  2207. 3 c 9 3
  2208. 7 d 10 7
  2209. query ITII
  2210. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2211. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)
  2212. FROM t
  2213. ORDER BY f2, f3, f1, first_value
  2214. ----
  2215. 1 a 1 1
  2216. 2 a 2 1
  2217. 2 a 3 2
  2218. 3 a 4 2
  2219. 4 b 5 4
  2220. 4 b 6 4
  2221. 1 c 7 1
  2222. 2 c 8 1
  2223. 3 c 9 2
  2224. 7 d 10 7
  2225. query ITII
  2226. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2227. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
  2228. FROM t
  2229. ORDER BY f2, f3, f1, first_value
  2230. ----
  2231. 1 a 1 1
  2232. 2 a 2 1
  2233. 2 a 3 1
  2234. 3 a 4 2
  2235. 4 b 5 4
  2236. 4 b 6 4
  2237. 1 c 7 1
  2238. 2 c 8 1
  2239. 3 c 9 1
  2240. 7 d 10 7
  2241. query ITII
  2242. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2243. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 10 PRECEDING AND CURRENT ROW)
  2244. FROM t
  2245. ORDER BY f2, f3, f1, first_value
  2246. ----
  2247. 1 a 1 1
  2248. 2 a 2 1
  2249. 2 a 3 1
  2250. 3 a 4 1
  2251. 4 b 5 4
  2252. 4 b 6 4
  2253. 1 c 7 1
  2254. 2 c 8 1
  2255. 3 c 9 1
  2256. 7 d 10 7
  2257. # ROWS BETWEEN x PRECEDING AND x FOLLOWING
  2258. # Equivalent to ROWS BETWEEN x PRECEDING AND CURRENT ROW for first_value
  2259. query ITII
  2260. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2261. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 PRECEDING AND 1 FOLLOWING)
  2262. FROM t
  2263. ORDER BY f2, f3, f1, first_value
  2264. ----
  2265. 1 a 1 1
  2266. 2 a 2 2
  2267. 2 a 3 2
  2268. 3 a 4 3
  2269. 4 b 5 4
  2270. 4 b 6 4
  2271. 1 c 7 1
  2272. 2 c 8 2
  2273. 3 c 9 3
  2274. 7 d 10 7
  2275. query ITII
  2276. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2277. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
  2278. FROM t
  2279. ORDER BY f2, f3, f1, first_value
  2280. ----
  2281. 1 a 1 1
  2282. 2 a 2 1
  2283. 2 a 3 2
  2284. 3 a 4 2
  2285. 4 b 5 4
  2286. 4 b 6 4
  2287. 1 c 7 1
  2288. 2 c 8 1
  2289. 3 c 9 2
  2290. 7 d 10 7
  2291. query ITII
  2292. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2293. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 PRECEDING AND 1 FOLLOWING)
  2294. FROM t
  2295. ORDER BY f2, f3, f1, first_value
  2296. ----
  2297. 1 a 1 1
  2298. 2 a 2 1
  2299. 2 a 3 1
  2300. 3 a 4 2
  2301. 4 b 5 4
  2302. 4 b 6 4
  2303. 1 c 7 1
  2304. 2 c 8 1
  2305. 3 c 9 1
  2306. 7 d 10 7
  2307. query ITII
  2308. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2309. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 10 PRECEDING AND 1 FOLLOWING)
  2310. FROM t
  2311. ORDER BY f2, f3, f1, first_value
  2312. ----
  2313. 1 a 1 1
  2314. 2 a 2 1
  2315. 2 a 3 1
  2316. 3 a 4 1
  2317. 4 b 5 4
  2318. 4 b 6 4
  2319. 1 c 7 1
  2320. 2 c 8 1
  2321. 3 c 9 1
  2322. 7 d 10 7
  2323. # ROWS BETWEEN x PRECEDING AND UNBOUNDED FOLLOWING
  2324. # Equivalent to ROWS BETWEEN x PRECEDING AND CURRENT ROW for first_value
  2325. query ITII
  2326. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2327. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 PRECEDING AND UNBOUNDED FOLLOWING)
  2328. FROM t
  2329. ORDER BY f2, f3, f1, first_value
  2330. ----
  2331. 1 a 1 1
  2332. 2 a 2 2
  2333. 2 a 3 2
  2334. 3 a 4 3
  2335. 4 b 5 4
  2336. 4 b 6 4
  2337. 1 c 7 1
  2338. 2 c 8 2
  2339. 3 c 9 3
  2340. 7 d 10 7
  2341. query ITII
  2342. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2343. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 PRECEDING AND UNBOUNDED FOLLOWING)
  2344. FROM t
  2345. ORDER BY f2, f3, f1, first_value
  2346. ----
  2347. 1 a 1 1
  2348. 2 a 2 1
  2349. 2 a 3 2
  2350. 3 a 4 2
  2351. 4 b 5 4
  2352. 4 b 6 4
  2353. 1 c 7 1
  2354. 2 c 8 1
  2355. 3 c 9 2
  2356. 7 d 10 7
  2357. query ITII
  2358. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2359. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING)
  2360. FROM t
  2361. ORDER BY f2, f3, f1, first_value
  2362. ----
  2363. 1 a 1 1
  2364. 2 a 2 1
  2365. 2 a 3 1
  2366. 3 a 4 2
  2367. 4 b 5 4
  2368. 4 b 6 4
  2369. 1 c 7 1
  2370. 2 c 8 1
  2371. 3 c 9 1
  2372. 7 d 10 7
  2373. query ITII
  2374. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2375. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 10 PRECEDING AND UNBOUNDED FOLLOWING)
  2376. FROM t
  2377. ORDER BY f2, f3, f1, first_value
  2378. ----
  2379. 1 a 1 1
  2380. 2 a 2 1
  2381. 2 a 3 1
  2382. 3 a 4 1
  2383. 4 b 5 4
  2384. 4 b 6 4
  2385. 1 c 7 1
  2386. 2 c 8 1
  2387. 3 c 9 1
  2388. 7 d 10 7
  2389. # ROWS BETWEEN CURRENT ROW AND CURRENT ROW
  2390. # Always returns current row
  2391. query ITII
  2392. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2393. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN CURRENT ROW AND CURRENT ROW)
  2394. FROM t
  2395. ORDER BY f2, f3, f1, first_value
  2396. ----
  2397. 1 a 1 1
  2398. 2 a 2 2
  2399. 2 a 3 2
  2400. 3 a 4 3
  2401. 4 b 5 4
  2402. 4 b 6 4
  2403. 1 c 7 1
  2404. 2 c 8 2
  2405. 3 c 9 3
  2406. 7 d 10 7
  2407. # ROWS BETWEEN CURRENT ROW AND x FOLLOWING
  2408. # Always returns current row
  2409. query ITII
  2410. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2411. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN CURRENT ROW AND 0 FOLLOWING)
  2412. FROM t
  2413. ORDER BY f2, f3, f1, first_value
  2414. ----
  2415. 1 a 1 1
  2416. 2 a 2 2
  2417. 2 a 3 2
  2418. 3 a 4 3
  2419. 4 b 5 4
  2420. 4 b 6 4
  2421. 1 c 7 1
  2422. 2 c 8 2
  2423. 3 c 9 3
  2424. 7 d 10 7
  2425. query ITII
  2426. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2427. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING)
  2428. FROM t
  2429. ORDER BY f2, f3, f1, first_value
  2430. ----
  2431. 1 a 1 1
  2432. 2 a 2 2
  2433. 2 a 3 2
  2434. 3 a 4 3
  2435. 4 b 5 4
  2436. 4 b 6 4
  2437. 1 c 7 1
  2438. 2 c 8 2
  2439. 3 c 9 3
  2440. 7 d 10 7
  2441. query ITII
  2442. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2443. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING)
  2444. FROM t
  2445. ORDER BY f2, f3, f1, first_value
  2446. ----
  2447. 1 a 1 1
  2448. 2 a 2 2
  2449. 2 a 3 2
  2450. 3 a 4 3
  2451. 4 b 5 4
  2452. 4 b 6 4
  2453. 1 c 7 1
  2454. 2 c 8 2
  2455. 3 c 9 3
  2456. 7 d 10 7
  2457. query ITII
  2458. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2459. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN CURRENT ROW AND 10 FOLLOWING)
  2460. FROM t
  2461. ORDER BY f2, f3, f1, first_value
  2462. ----
  2463. 1 a 1 1
  2464. 2 a 2 2
  2465. 2 a 3 2
  2466. 3 a 4 3
  2467. 4 b 5 4
  2468. 4 b 6 4
  2469. 1 c 7 1
  2470. 2 c 8 2
  2471. 3 c 9 3
  2472. 7 d 10 7
  2473. # ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
  2474. # Always returns current row
  2475. query ITII
  2476. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2477. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
  2478. FROM t
  2479. ORDER BY f2, f3, f1, first_value
  2480. ----
  2481. 1 a 1 1
  2482. 2 a 2 2
  2483. 2 a 3 2
  2484. 3 a 4 3
  2485. 4 b 5 4
  2486. 4 b 6 4
  2487. 1 c 7 1
  2488. 2 c 8 2
  2489. 3 c 9 3
  2490. 7 d 10 7
  2491. # ROWS BETWEEN 0 FOLLOWING AND x FOLLOWING
  2492. query ITII
  2493. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2494. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 FOLLOWING AND 1 FOLLOWING)
  2495. FROM t
  2496. ORDER BY f2, f3, f1, first_value
  2497. ----
  2498. 1 a 1 1
  2499. 2 a 2 2
  2500. 2 a 3 2
  2501. 3 a 4 3
  2502. 4 b 5 4
  2503. 4 b 6 4
  2504. 1 c 7 1
  2505. 2 c 8 2
  2506. 3 c 9 3
  2507. 7 d 10 7
  2508. query ITII
  2509. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2510. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 FOLLOWING AND 2 FOLLOWING)
  2511. FROM t
  2512. ORDER BY f2, f3, f1, first_value
  2513. ----
  2514. 1 a 1 1
  2515. 2 a 2 2
  2516. 2 a 3 2
  2517. 3 a 4 3
  2518. 4 b 5 4
  2519. 4 b 6 4
  2520. 1 c 7 1
  2521. 2 c 8 2
  2522. 3 c 9 3
  2523. 7 d 10 7
  2524. query ITII
  2525. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2526. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 FOLLOWING AND 10 FOLLOWING)
  2527. FROM t
  2528. ORDER BY f2, f3, f1, first_value
  2529. ----
  2530. 1 a 1 1
  2531. 2 a 2 2
  2532. 2 a 3 2
  2533. 3 a 4 3
  2534. 4 b 5 4
  2535. 4 b 6 4
  2536. 1 c 7 1
  2537. 2 c 8 2
  2538. 3 c 9 3
  2539. 7 d 10 7
  2540. # ROWS BETWEEN x FOLLOWING AND 0 FOLLOWING
  2541. query ITII
  2542. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2543. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 FOLLOWING AND 0 FOLLOWING)
  2544. FROM t
  2545. ORDER BY f2, f3, f1, first_value
  2546. ----
  2547. 1 a 1 NULL
  2548. 2 a 2 NULL
  2549. 2 a 3 NULL
  2550. 3 a 4 NULL
  2551. 4 b 5 NULL
  2552. 4 b 6 NULL
  2553. 1 c 7 NULL
  2554. 2 c 8 NULL
  2555. 3 c 9 NULL
  2556. 7 d 10 NULL
  2557. query ITII
  2558. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2559. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 FOLLOWING AND 0 FOLLOWING)
  2560. FROM t
  2561. ORDER BY f2, f3, f1, first_value
  2562. ----
  2563. 1 a 1 NULL
  2564. 2 a 2 NULL
  2565. 2 a 3 NULL
  2566. 3 a 4 NULL
  2567. 4 b 5 NULL
  2568. 4 b 6 NULL
  2569. 1 c 7 NULL
  2570. 2 c 8 NULL
  2571. 3 c 9 NULL
  2572. 7 d 10 NULL
  2573. query ITII
  2574. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2575. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 10 FOLLOWING AND 0 FOLLOWING)
  2576. FROM t
  2577. ORDER BY f2, f3, f1, first_value
  2578. ----
  2579. 1 a 1 NULL
  2580. 2 a 2 NULL
  2581. 2 a 3 NULL
  2582. 3 a 4 NULL
  2583. 4 b 5 NULL
  2584. 4 b 6 NULL
  2585. 1 c 7 NULL
  2586. 2 c 8 NULL
  2587. 3 c 9 NULL
  2588. 7 d 10 NULL
  2589. # ROWS BETWEEN x FOLLOWING AND y FOLLOWING, where x < y
  2590. query ITII
  2591. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2592. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 FOLLOWING AND 1 FOLLOWING)
  2593. FROM t
  2594. ORDER BY f2, f3, f1, first_value
  2595. ----
  2596. 1 a 1 1
  2597. 2 a 2 2
  2598. 2 a 3 2
  2599. 3 a 4 3
  2600. 4 b 5 4
  2601. 4 b 6 4
  2602. 1 c 7 1
  2603. 2 c 8 2
  2604. 3 c 9 3
  2605. 7 d 10 7
  2606. query ITII
  2607. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2608. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING)
  2609. FROM t
  2610. ORDER BY f2, f3, f1, first_value
  2611. ----
  2612. 1 a 1 2
  2613. 2 a 2 2
  2614. 2 a 3 3
  2615. 3 a 4 NULL
  2616. 4 b 5 4
  2617. 4 b 6 NULL
  2618. 1 c 7 2
  2619. 2 c 8 3
  2620. 3 c 9 NULL
  2621. 7 d 10 NULL
  2622. # ROWS BETWEEN x FOLLOWING AND y FOLLOWING, where x > y
  2623. query ITII
  2624. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2625. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 FOLLOWING AND 0 FOLLOWING)
  2626. FROM t
  2627. ORDER BY f2, f3, f1, first_value
  2628. ----
  2629. 1 a 1 NULL
  2630. 2 a 2 NULL
  2631. 2 a 3 NULL
  2632. 3 a 4 NULL
  2633. 4 b 5 NULL
  2634. 4 b 6 NULL
  2635. 1 c 7 NULL
  2636. 2 c 8 NULL
  2637. 3 c 9 NULL
  2638. 7 d 10 NULL
  2639. query ITII
  2640. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2641. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 FOLLOWING AND 1 FOLLOWING)
  2642. FROM t
  2643. ORDER BY f2, f3, f1, first_value
  2644. ----
  2645. 1 a 1 NULL
  2646. 2 a 2 NULL
  2647. 2 a 3 NULL
  2648. 3 a 4 NULL
  2649. 4 b 5 NULL
  2650. 4 b 6 NULL
  2651. 1 c 7 NULL
  2652. 2 c 8 NULL
  2653. 3 c 9 NULL
  2654. 7 d 10 NULL
  2655. # ROWS BETWEEN x FOLLOWING AND y FOLLOWING, where x == y
  2656. query ITII
  2657. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2658. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 FOLLOWING AND 0 FOLLOWING)
  2659. FROM t
  2660. ORDER BY f2, f3, f1, first_value
  2661. ----
  2662. 1 a 1 1
  2663. 2 a 2 2
  2664. 2 a 3 2
  2665. 3 a 4 3
  2666. 4 b 5 4
  2667. 4 b 6 4
  2668. 1 c 7 1
  2669. 2 c 8 2
  2670. 3 c 9 3
  2671. 7 d 10 7
  2672. query ITII
  2673. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2674. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING)
  2675. FROM t
  2676. ORDER BY f2, f3, f1, first_value
  2677. ----
  2678. 1 a 1 2
  2679. 2 a 2 2
  2680. 2 a 3 3
  2681. 3 a 4 NULL
  2682. 4 b 5 4
  2683. 4 b 6 NULL
  2684. 1 c 7 2
  2685. 2 c 8 3
  2686. 3 c 9 NULL
  2687. 7 d 10 NULL
  2688. query ITII
  2689. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2690. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 FOLLOWING AND 2 FOLLOWING)
  2691. FROM t
  2692. ORDER BY f2, f3, f1, first_value
  2693. ----
  2694. 1 a 1 2
  2695. 2 a 2 3
  2696. 2 a 3 NULL
  2697. 3 a 4 NULL
  2698. 4 b 5 NULL
  2699. 4 b 6 NULL
  2700. 1 c 7 3
  2701. 2 c 8 NULL
  2702. 3 c 9 NULL
  2703. 7 d 10 NULL
  2704. query ITII
  2705. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2706. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 10 FOLLOWING AND 10 FOLLOWING)
  2707. FROM t
  2708. ORDER BY f2, f3, f1, first_value
  2709. ----
  2710. 1 a 1 NULL
  2711. 2 a 2 NULL
  2712. 2 a 3 NULL
  2713. 3 a 4 NULL
  2714. 4 b 5 NULL
  2715. 4 b 6 NULL
  2716. 1 c 7 NULL
  2717. 2 c 8 NULL
  2718. 3 c 9 NULL
  2719. 7 d 10 NULL
  2720. # ROWS BETWEEN x FOLLOWING AND UNBOUNDED FOLLOWING
  2721. query ITII
  2722. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2723. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 FOLLOWING AND UNBOUNDED FOLLOWING)
  2724. FROM t
  2725. ORDER BY f2, f3, f1, first_value
  2726. ----
  2727. 1 a 1 1
  2728. 2 a 2 2
  2729. 2 a 3 2
  2730. 3 a 4 3
  2731. 4 b 5 4
  2732. 4 b 6 4
  2733. 1 c 7 1
  2734. 2 c 8 2
  2735. 3 c 9 3
  2736. 7 d 10 7
  2737. query ITII
  2738. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2739. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)
  2740. FROM t
  2741. ORDER BY f2, f3, f1, first_value
  2742. ----
  2743. 1 a 1 2
  2744. 2 a 2 2
  2745. 2 a 3 3
  2746. 3 a 4 NULL
  2747. 4 b 5 4
  2748. 4 b 6 NULL
  2749. 1 c 7 2
  2750. 2 c 8 3
  2751. 3 c 9 NULL
  2752. 7 d 10 NULL
  2753. query ITII
  2754. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2755. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 FOLLOWING AND UNBOUNDED FOLLOWING)
  2756. FROM t
  2757. ORDER BY f2, f3, f1, first_value
  2758. ----
  2759. 1 a 1 2
  2760. 2 a 2 3
  2761. 2 a 3 NULL
  2762. 3 a 4 NULL
  2763. 4 b 5 NULL
  2764. 4 b 6 NULL
  2765. 1 c 7 3
  2766. 2 c 8 NULL
  2767. 3 c 9 NULL
  2768. 7 d 10 NULL
  2769. query ITII
  2770. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2771. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 10 FOLLOWING AND UNBOUNDED FOLLOWING)
  2772. FROM t
  2773. ORDER BY f2, f3, f1, first_value
  2774. ----
  2775. 1 a 1 NULL
  2776. 2 a 2 NULL
  2777. 2 a 3 NULL
  2778. 3 a 4 NULL
  2779. 4 b 5 NULL
  2780. 4 b 6 NULL
  2781. 1 c 7 NULL
  2782. 2 c 8 NULL
  2783. 3 c 9 NULL
  2784. 7 d 10 NULL
  2785. # Test near-overflow behavior on offsets
  2786. # u64::MAX FOLLOWING
  2787. query error db error: ERROR: Window frame offsets greater than 1000000 are currently not supported
  2788. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2789. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 18446744073709551615 FOLLOWING AND 18446744073709551615 FOLLOWING)
  2790. FROM t
  2791. ORDER BY f2, f3, f1, first_value
  2792. query error db error: ERROR: Window frame offsets greater than 1000000 are currently not supported
  2793. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2794. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 18446744073709551614 FOLLOWING AND 18446744073709551615 FOLLOWING)
  2795. FROM t
  2796. ORDER BY f2, f3, f1, first_value
  2797. # u64::MAX PRECEDING
  2798. query error db error: ERROR: Window frame offsets greater than 1000000 are currently not supported
  2799. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2800. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 18446744073709551615 PRECEDING AND 18446744073709551615 PRECEDING)
  2801. FROM t
  2802. ORDER BY f2, f3, f1, first_value
  2803. query error db error: ERROR: Window frame offsets greater than 1000000 are currently not supported
  2804. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2805. SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 18446744073709551615 PRECEDING AND 18446744073709551614 PRECEDING)
  2806. FROM t
  2807. ORDER BY f2, f3, f1, first_value
  2808. ## last_value
  2809. # Default frame (RANGE BETWEEN UNBOUNDED FOLLOWING AND CURRENT ROW)
  2810. query ITII
  2811. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2812. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC)
  2813. FROM t
  2814. ORDER BY f2, f3, f1, last_value
  2815. ----
  2816. 1 a 1 1
  2817. 2 a 2 2
  2818. 2 a 3 2
  2819. 3 a 4 3
  2820. 4 b 5 4
  2821. 4 b 6 4
  2822. 1 c 7 1
  2823. 2 c 8 2
  2824. 3 c 9 3
  2825. 7 d 10 7
  2826. # Default frame with large peer group
  2827. # Note: there are multiple valid results of this query (because the default frame is up through the current row's last
  2828. # ORDER BY peer, and the ordering among ORDER BY peers is unspecified), but we make the result stable by internally
  2829. # always adding all remaining columns into our orderings.
  2830. query ITII
  2831. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2832. SELECT f1, f2, f3, last_value(f3) OVER (PARTITION BY f2 ORDER BY f1)
  2833. FROM t
  2834. ORDER BY f2, f3, f1, last_value
  2835. ----
  2836. 1 a 1 1
  2837. 2 a 2 3
  2838. 2 a 3 3
  2839. 3 a 4 4
  2840. 4 b 5 6
  2841. 4 b 6 6
  2842. 1 c 7 7
  2843. 2 c 8 8
  2844. 3 c 9 9
  2845. 7 d 10 10
  2846. # ROWS BETWEEN x FOLLOWING AND UNBOUNDED FOLLOWING
  2847. query ITII
  2848. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2849. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 FOLLOWING AND UNBOUNDED FOLLOWING)
  2850. FROM t
  2851. ORDER BY f2, f3, f1, last_value
  2852. ----
  2853. 1 a 1 1
  2854. 2 a 2 1
  2855. 2 a 3 1
  2856. 3 a 4 1
  2857. 4 b 5 4
  2858. 4 b 6 4
  2859. 1 c 7 1
  2860. 2 c 8 1
  2861. 3 c 9 1
  2862. 7 d 10 7
  2863. query ITII
  2864. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2865. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)
  2866. FROM t
  2867. ORDER BY f2, f3, f1, last_value
  2868. ----
  2869. 1 a 1 NULL
  2870. 2 a 2 1
  2871. 2 a 3 1
  2872. 3 a 4 1
  2873. 4 b 5 NULL
  2874. 4 b 6 4
  2875. 1 c 7 NULL
  2876. 2 c 8 1
  2877. 3 c 9 1
  2878. 7 d 10 NULL
  2879. query ITII
  2880. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2881. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 2 FOLLOWING AND UNBOUNDED FOLLOWING)
  2882. FROM t
  2883. ORDER BY f2, f3, f1, last_value
  2884. ----
  2885. 1 a 1 NULL
  2886. 2 a 2 NULL
  2887. 2 a 3 1
  2888. 3 a 4 1
  2889. 4 b 5 NULL
  2890. 4 b 6 NULL
  2891. 1 c 7 NULL
  2892. 2 c 8 NULL
  2893. 3 c 9 1
  2894. 7 d 10 NULL
  2895. query ITII
  2896. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2897. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 10 FOLLOWING AND UNBOUNDED FOLLOWING)
  2898. FROM t
  2899. ORDER BY f2, f3, f1, last_value
  2900. ----
  2901. 1 a 1 NULL
  2902. 2 a 2 NULL
  2903. 2 a 3 NULL
  2904. 3 a 4 NULL
  2905. 4 b 5 NULL
  2906. 4 b 6 NULL
  2907. 1 c 7 NULL
  2908. 2 c 8 NULL
  2909. 3 c 9 NULL
  2910. 7 d 10 NULL
  2911. # ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
  2912. query ITII
  2913. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2914. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
  2915. FROM t
  2916. ORDER BY f2, f3, f1, last_value
  2917. ----
  2918. 1 a 1 1
  2919. 2 a 2 1
  2920. 2 a 3 1
  2921. 3 a 4 1
  2922. 4 b 5 4
  2923. 4 b 6 4
  2924. 1 c 7 1
  2925. 2 c 8 1
  2926. 3 c 9 1
  2927. 7 d 10 7
  2928. # ROWS BETWEEN x PRECEDING AND UNBOUNDED FOLLOWING
  2929. query ITII
  2930. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2931. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 PRECEDING AND UNBOUNDED FOLLOWING)
  2932. FROM t
  2933. ORDER BY f2, f3, f1, last_value
  2934. ----
  2935. 1 a 1 1
  2936. 2 a 2 1
  2937. 2 a 3 1
  2938. 3 a 4 1
  2939. 4 b 5 4
  2940. 4 b 6 4
  2941. 1 c 7 1
  2942. 2 c 8 1
  2943. 3 c 9 1
  2944. 7 d 10 7
  2945. query ITII
  2946. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2947. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND UNBOUNDED FOLLOWING)
  2948. FROM t
  2949. ORDER BY f2, f3, f1, last_value
  2950. ----
  2951. 1 a 1 1
  2952. 2 a 2 1
  2953. 2 a 3 1
  2954. 3 a 4 1
  2955. 4 b 5 4
  2956. 4 b 6 4
  2957. 1 c 7 1
  2958. 2 c 8 1
  2959. 3 c 9 1
  2960. 7 d 10 7
  2961. query ITII
  2962. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2963. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING)
  2964. FROM t
  2965. ORDER BY f2, f3, f1, last_value
  2966. ----
  2967. 1 a 1 1
  2968. 2 a 2 1
  2969. 2 a 3 1
  2970. 3 a 4 1
  2971. 4 b 5 4
  2972. 4 b 6 4
  2973. 1 c 7 1
  2974. 2 c 8 1
  2975. 3 c 9 1
  2976. 7 d 10 7
  2977. query ITII
  2978. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2979. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 10 PRECEDING AND UNBOUNDED FOLLOWING)
  2980. FROM t
  2981. ORDER BY f2, f3, f1, last_value
  2982. ----
  2983. 1 a 1 1
  2984. 2 a 2 1
  2985. 2 a 3 1
  2986. 3 a 4 1
  2987. 4 b 5 4
  2988. 4 b 6 4
  2989. 1 c 7 1
  2990. 2 c 8 1
  2991. 3 c 9 1
  2992. 7 d 10 7
  2993. # ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
  2994. query ITII
  2995. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  2996. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
  2997. FROM t
  2998. ORDER BY f2, f3, f1, last_value
  2999. ----
  3000. 1 a 1 1
  3001. 2 a 2 1
  3002. 2 a 3 1
  3003. 3 a 4 1
  3004. 4 b 5 4
  3005. 4 b 6 4
  3006. 1 c 7 1
  3007. 2 c 8 1
  3008. 3 c 9 1
  3009. 7 d 10 7
  3010. # ROWS BETWEEN x FOLLOWING AND 0 FOLLOWING
  3011. query ITII
  3012. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3013. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 FOLLOWING AND 0 FOLLOWING)
  3014. FROM t
  3015. ORDER BY f2, f3, f1, last_value
  3016. ----
  3017. 1 a 1 NULL
  3018. 2 a 2 NULL
  3019. 2 a 3 NULL
  3020. 3 a 4 NULL
  3021. 4 b 5 NULL
  3022. 4 b 6 NULL
  3023. 1 c 7 NULL
  3024. 2 c 8 NULL
  3025. 3 c 9 NULL
  3026. 7 d 10 NULL
  3027. query ITII
  3028. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3029. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 2 FOLLOWING AND 0 FOLLOWING)
  3030. FROM t
  3031. ORDER BY f2, f3, f1, last_value
  3032. ----
  3033. 1 a 1 NULL
  3034. 2 a 2 NULL
  3035. 2 a 3 NULL
  3036. 3 a 4 NULL
  3037. 4 b 5 NULL
  3038. 4 b 6 NULL
  3039. 1 c 7 NULL
  3040. 2 c 8 NULL
  3041. 3 c 9 NULL
  3042. 7 d 10 NULL
  3043. query ITII
  3044. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3045. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 10 FOLLOWING AND 0 FOLLOWING)
  3046. FROM t
  3047. ORDER BY f2, f3, f1, last_value
  3048. ----
  3049. 1 a 1 NULL
  3050. 2 a 2 NULL
  3051. 2 a 3 NULL
  3052. 3 a 4 NULL
  3053. 4 b 5 NULL
  3054. 4 b 6 NULL
  3055. 1 c 7 NULL
  3056. 2 c 8 NULL
  3057. 3 c 9 NULL
  3058. 7 d 10 NULL
  3059. # ROWS BETWEEN 0 FOLLOWING AND x FOLLOWING
  3060. query ITII
  3061. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3062. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 FOLLOWING AND 1 FOLLOWING)
  3063. FROM t
  3064. ORDER BY f2, f3, f1, last_value
  3065. ----
  3066. 1 a 1 1
  3067. 2 a 2 1
  3068. 2 a 3 2
  3069. 3 a 4 2
  3070. 4 b 5 4
  3071. 4 b 6 4
  3072. 1 c 7 1
  3073. 2 c 8 1
  3074. 3 c 9 2
  3075. 7 d 10 7
  3076. query ITII
  3077. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3078. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 FOLLOWING AND 2 FOLLOWING)
  3079. FROM t
  3080. ORDER BY f2, f3, f1, last_value
  3081. ----
  3082. 1 a 1 1
  3083. 2 a 2 1
  3084. 2 a 3 1
  3085. 3 a 4 2
  3086. 4 b 5 4
  3087. 4 b 6 4
  3088. 1 c 7 1
  3089. 2 c 8 1
  3090. 3 c 9 1
  3091. 7 d 10 7
  3092. query ITII
  3093. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3094. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 FOLLOWING AND 10 FOLLOWING)
  3095. FROM t
  3096. ORDER BY f2, f3, f1, last_value
  3097. ----
  3098. 1 a 1 1
  3099. 2 a 2 1
  3100. 2 a 3 1
  3101. 3 a 4 1
  3102. 4 b 5 4
  3103. 4 b 6 4
  3104. 1 c 7 1
  3105. 2 c 8 1
  3106. 3 c 9 1
  3107. 7 d 10 7
  3108. # ROWS BETWEEN y FOLLOWING AND x FOLLOWING, where x < y
  3109. query ITII
  3110. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3111. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 FOLLOWING AND 0 FOLLOWING)
  3112. FROM t
  3113. ORDER BY f2, f3, f1, last_value
  3114. ----
  3115. 1 a 1 NULL
  3116. 2 a 2 NULL
  3117. 2 a 3 NULL
  3118. 3 a 4 NULL
  3119. 4 b 5 NULL
  3120. 4 b 6 NULL
  3121. 1 c 7 NULL
  3122. 2 c 8 NULL
  3123. 3 c 9 NULL
  3124. 7 d 10 NULL
  3125. query ITII
  3126. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3127. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 2 FOLLOWING AND 1 FOLLOWING)
  3128. FROM t
  3129. ORDER BY f2, f3, f1, last_value
  3130. ----
  3131. 1 a 1 NULL
  3132. 2 a 2 NULL
  3133. 2 a 3 NULL
  3134. 3 a 4 NULL
  3135. 4 b 5 NULL
  3136. 4 b 6 NULL
  3137. 1 c 7 NULL
  3138. 2 c 8 NULL
  3139. 3 c 9 NULL
  3140. 7 d 10 NULL
  3141. # ROWS BETWEEN y FOLLOWING AND x FOLLOWING, where x > y
  3142. query ITII
  3143. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3144. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 FOLLOWING AND 1 FOLLOWING)
  3145. FROM t
  3146. ORDER BY f2, f3, f1, last_value
  3147. ----
  3148. 1 a 1 1
  3149. 2 a 2 1
  3150. 2 a 3 2
  3151. 3 a 4 2
  3152. 4 b 5 4
  3153. 4 b 6 4
  3154. 1 c 7 1
  3155. 2 c 8 1
  3156. 3 c 9 2
  3157. 7 d 10 7
  3158. query ITII
  3159. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3160. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING)
  3161. FROM t
  3162. ORDER BY f2, f3, f1, last_value
  3163. ----
  3164. 1 a 1 NULL
  3165. 2 a 2 1
  3166. 2 a 3 1
  3167. 3 a 4 2
  3168. 4 b 5 NULL
  3169. 4 b 6 4
  3170. 1 c 7 NULL
  3171. 2 c 8 1
  3172. 3 c 9 1
  3173. 7 d 10 NULL
  3174. # ROWS BETWEEN x FOLLOWING AND y FOLLOWING, where x == y
  3175. query ITII
  3176. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3177. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 FOLLOWING AND 0 FOLLOWING)
  3178. FROM t
  3179. ORDER BY f2, f3, f1, last_value
  3180. ----
  3181. 1 a 1 1
  3182. 2 a 2 2
  3183. 2 a 3 2
  3184. 3 a 4 3
  3185. 4 b 5 4
  3186. 4 b 6 4
  3187. 1 c 7 1
  3188. 2 c 8 2
  3189. 3 c 9 3
  3190. 7 d 10 7
  3191. query ITII
  3192. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3193. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING)
  3194. FROM t
  3195. ORDER BY f2, f3, f1, last_value
  3196. ----
  3197. 1 a 1 NULL
  3198. 2 a 2 1
  3199. 2 a 3 2
  3200. 3 a 4 2
  3201. 4 b 5 NULL
  3202. 4 b 6 4
  3203. 1 c 7 NULL
  3204. 2 c 8 1
  3205. 3 c 9 2
  3206. 7 d 10 NULL
  3207. query ITII
  3208. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3209. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 2 FOLLOWING AND 2 FOLLOWING)
  3210. FROM t
  3211. ORDER BY f2, f3, f1, last_value
  3212. ----
  3213. 1 a 1 NULL
  3214. 2 a 2 NULL
  3215. 2 a 3 1
  3216. 3 a 4 2
  3217. 4 b 5 NULL
  3218. 4 b 6 NULL
  3219. 1 c 7 NULL
  3220. 2 c 8 NULL
  3221. 3 c 9 1
  3222. 7 d 10 NULL
  3223. query ITII
  3224. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3225. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 10 FOLLOWING AND 10 FOLLOWING)
  3226. FROM t
  3227. ORDER BY f2, f3, f1, last_value
  3228. ----
  3229. 1 a 1 NULL
  3230. 2 a 2 NULL
  3231. 2 a 3 NULL
  3232. 3 a 4 NULL
  3233. 4 b 5 NULL
  3234. 4 b 6 NULL
  3235. 1 c 7 NULL
  3236. 2 c 8 NULL
  3237. 3 c 9 NULL
  3238. 7 d 10 NULL
  3239. # ROWS BETWEEN CURRENT ROW AND x FOLLOWING
  3240. query ITII
  3241. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3242. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN CURRENT ROW AND 0 FOLLOWING)
  3243. FROM t
  3244. ORDER BY f2, f3, f1, last_value
  3245. ----
  3246. 1 a 1 1
  3247. 2 a 2 2
  3248. 2 a 3 2
  3249. 3 a 4 3
  3250. 4 b 5 4
  3251. 4 b 6 4
  3252. 1 c 7 1
  3253. 2 c 8 2
  3254. 3 c 9 3
  3255. 7 d 10 7
  3256. query ITII
  3257. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3258. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING)
  3259. FROM t
  3260. ORDER BY f2, f3, f1, last_value
  3261. ----
  3262. 1 a 1 1
  3263. 2 a 2 1
  3264. 2 a 3 2
  3265. 3 a 4 2
  3266. 4 b 5 4
  3267. 4 b 6 4
  3268. 1 c 7 1
  3269. 2 c 8 1
  3270. 3 c 9 2
  3271. 7 d 10 7
  3272. query ITII
  3273. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3274. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING)
  3275. FROM t
  3276. ORDER BY f2, f3, f1, last_value
  3277. ----
  3278. 1 a 1 1
  3279. 2 a 2 1
  3280. 2 a 3 1
  3281. 3 a 4 2
  3282. 4 b 5 4
  3283. 4 b 6 4
  3284. 1 c 7 1
  3285. 2 c 8 1
  3286. 3 c 9 1
  3287. 7 d 10 7
  3288. query ITII
  3289. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3290. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN CURRENT ROW AND 10 FOLLOWING)
  3291. FROM t
  3292. ORDER BY f2, f3, f1, last_value
  3293. ----
  3294. 1 a 1 1
  3295. 2 a 2 1
  3296. 2 a 3 1
  3297. 3 a 4 1
  3298. 4 b 5 4
  3299. 4 b 6 4
  3300. 1 c 7 1
  3301. 2 c 8 1
  3302. 3 c 9 1
  3303. 7 d 10 7
  3304. # ROWS BETWEEN x PRECEDING AND x FOLLOWING
  3305. # Equivalent to ROWS BETWEEN CURRENT ROW AND x FOLLOWING for last_value
  3306. query ITII
  3307. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3308. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND 0 FOLLOWING)
  3309. FROM t
  3310. ORDER BY f2, f3, f1, last_value
  3311. ----
  3312. 1 a 1 1
  3313. 2 a 2 2
  3314. 2 a 3 2
  3315. 3 a 4 3
  3316. 4 b 5 4
  3317. 4 b 6 4
  3318. 1 c 7 1
  3319. 2 c 8 2
  3320. 3 c 9 3
  3321. 7 d 10 7
  3322. query ITII
  3323. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3324. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
  3325. FROM t
  3326. ORDER BY f2, f3, f1, last_value
  3327. ----
  3328. 1 a 1 1
  3329. 2 a 2 1
  3330. 2 a 3 2
  3331. 3 a 4 2
  3332. 4 b 5 4
  3333. 4 b 6 4
  3334. 1 c 7 1
  3335. 2 c 8 1
  3336. 3 c 9 2
  3337. 7 d 10 7
  3338. query ITII
  3339. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3340. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND 2 FOLLOWING)
  3341. FROM t
  3342. ORDER BY f2, f3, f1, last_value
  3343. ----
  3344. 1 a 1 1
  3345. 2 a 2 1
  3346. 2 a 3 1
  3347. 3 a 4 2
  3348. 4 b 5 4
  3349. 4 b 6 4
  3350. 1 c 7 1
  3351. 2 c 8 1
  3352. 3 c 9 1
  3353. 7 d 10 7
  3354. query ITII
  3355. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3356. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND 10 FOLLOWING)
  3357. FROM t
  3358. ORDER BY f2, f3, f1, last_value
  3359. ----
  3360. 1 a 1 1
  3361. 2 a 2 1
  3362. 2 a 3 1
  3363. 3 a 4 1
  3364. 4 b 5 4
  3365. 4 b 6 4
  3366. 1 c 7 1
  3367. 2 c 8 1
  3368. 3 c 9 1
  3369. 7 d 10 7
  3370. # ROWS BETWEEN UNBOUNDED PRECEDING AND x FOLLOWING
  3371. # Equivalent to ROWS BETWEEN CURRENT ROW AND x FOLLOWING for last_value
  3372. query ITII
  3373. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3374. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 FOLLOWING)
  3375. FROM t
  3376. ORDER BY f2, f3, f1, last_value
  3377. ----
  3378. 1 a 1 1
  3379. 2 a 2 2
  3380. 2 a 3 2
  3381. 3 a 4 3
  3382. 4 b 5 4
  3383. 4 b 6 4
  3384. 1 c 7 1
  3385. 2 c 8 2
  3386. 3 c 9 3
  3387. 7 d 10 7
  3388. query ITII
  3389. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3390. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING)
  3391. FROM t
  3392. ORDER BY f2, f3, f1, last_value
  3393. ----
  3394. 1 a 1 1
  3395. 2 a 2 1
  3396. 2 a 3 2
  3397. 3 a 4 2
  3398. 4 b 5 4
  3399. 4 b 6 4
  3400. 1 c 7 1
  3401. 2 c 8 1
  3402. 3 c 9 2
  3403. 7 d 10 7
  3404. query ITII
  3405. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3406. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING)
  3407. FROM t
  3408. ORDER BY f2, f3, f1, last_value
  3409. ----
  3410. 1 a 1 1
  3411. 2 a 2 1
  3412. 2 a 3 1
  3413. 3 a 4 2
  3414. 4 b 5 4
  3415. 4 b 6 4
  3416. 1 c 7 1
  3417. 2 c 8 1
  3418. 3 c 9 1
  3419. 7 d 10 7
  3420. query ITII
  3421. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3422. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 10 FOLLOWING)
  3423. FROM t
  3424. ORDER BY f2, f3, f1, last_value
  3425. ----
  3426. 1 a 1 1
  3427. 2 a 2 1
  3428. 2 a 3 1
  3429. 3 a 4 1
  3430. 4 b 5 4
  3431. 4 b 6 4
  3432. 1 c 7 1
  3433. 2 c 8 1
  3434. 3 c 9 1
  3435. 7 d 10 7
  3436. # ROWS BETWEEN CURRENT ROW AND CURRENT ROW
  3437. # Always returns current row
  3438. query ITII
  3439. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3440. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN CURRENT ROW AND CURRENT ROW)
  3441. FROM t
  3442. ORDER BY f2, f3, f1, last_value
  3443. ----
  3444. 1 a 1 1
  3445. 2 a 2 2
  3446. 2 a 3 2
  3447. 3 a 4 3
  3448. 4 b 5 4
  3449. 4 b 6 4
  3450. 1 c 7 1
  3451. 2 c 8 2
  3452. 3 c 9 3
  3453. 7 d 10 7
  3454. # ROWS BETWEEN x PRECEDING AND CURRENT ROW
  3455. # Always returns current row
  3456. query ITII
  3457. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3458. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 PRECEDING AND CURRENT ROW)
  3459. FROM t
  3460. ORDER BY f2, f3, f1, last_value
  3461. ----
  3462. 1 a 1 1
  3463. 2 a 2 2
  3464. 2 a 3 2
  3465. 3 a 4 3
  3466. 4 b 5 4
  3467. 4 b 6 4
  3468. 1 c 7 1
  3469. 2 c 8 2
  3470. 3 c 9 3
  3471. 7 d 10 7
  3472. query ITII
  3473. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3474. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)
  3475. FROM t
  3476. ORDER BY f2, f3, f1, last_value
  3477. ----
  3478. 1 a 1 1
  3479. 2 a 2 2
  3480. 2 a 3 2
  3481. 3 a 4 3
  3482. 4 b 5 4
  3483. 4 b 6 4
  3484. 1 c 7 1
  3485. 2 c 8 2
  3486. 3 c 9 3
  3487. 7 d 10 7
  3488. query ITII
  3489. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3490. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
  3491. FROM t
  3492. ORDER BY f2, f3, f1, last_value
  3493. ----
  3494. 1 a 1 1
  3495. 2 a 2 2
  3496. 2 a 3 2
  3497. 3 a 4 3
  3498. 4 b 5 4
  3499. 4 b 6 4
  3500. 1 c 7 1
  3501. 2 c 8 2
  3502. 3 c 9 3
  3503. 7 d 10 7
  3504. query ITII
  3505. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3506. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 10 PRECEDING AND CURRENT ROW)
  3507. FROM t
  3508. ORDER BY f2, f3, f1, last_value
  3509. ----
  3510. 1 a 1 1
  3511. 2 a 2 2
  3512. 2 a 3 2
  3513. 3 a 4 3
  3514. 4 b 5 4
  3515. 4 b 6 4
  3516. 1 c 7 1
  3517. 2 c 8 2
  3518. 3 c 9 3
  3519. 7 d 10 7
  3520. # ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
  3521. # Always returns current row
  3522. query ITII
  3523. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3524. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
  3525. FROM t
  3526. ORDER BY f2, f3, f1, last_value
  3527. ----
  3528. 1 a 1 1
  3529. 2 a 2 2
  3530. 2 a 3 2
  3531. 3 a 4 3
  3532. 4 b 5 4
  3533. 4 b 6 4
  3534. 1 c 7 1
  3535. 2 c 8 2
  3536. 3 c 9 3
  3537. 7 d 10 7
  3538. # ROWS BETWEEN x PRECEDING AND 0 PRECEDING
  3539. query ITII
  3540. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3541. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND 0 PRECEDING)
  3542. FROM t
  3543. ORDER BY f2, f3, f1, last_value
  3544. ----
  3545. 1 a 1 1
  3546. 2 a 2 2
  3547. 2 a 3 2
  3548. 3 a 4 3
  3549. 4 b 5 4
  3550. 4 b 6 4
  3551. 1 c 7 1
  3552. 2 c 8 2
  3553. 3 c 9 3
  3554. 7 d 10 7
  3555. query ITII
  3556. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3557. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 2 PRECEDING AND 0 PRECEDING)
  3558. FROM t
  3559. ORDER BY f2, f3, f1, last_value
  3560. ----
  3561. 1 a 1 1
  3562. 2 a 2 2
  3563. 2 a 3 2
  3564. 3 a 4 3
  3565. 4 b 5 4
  3566. 4 b 6 4
  3567. 1 c 7 1
  3568. 2 c 8 2
  3569. 3 c 9 3
  3570. 7 d 10 7
  3571. query ITII
  3572. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3573. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 10 PRECEDING AND 0 PRECEDING)
  3574. FROM t
  3575. ORDER BY f2, f3, f1, last_value
  3576. ----
  3577. 1 a 1 1
  3578. 2 a 2 2
  3579. 2 a 3 2
  3580. 3 a 4 3
  3581. 4 b 5 4
  3582. 4 b 6 4
  3583. 1 c 7 1
  3584. 2 c 8 2
  3585. 3 c 9 3
  3586. 7 d 10 7
  3587. # ROWS BETWEEN 0 PRECEDING AND x PRECEDING
  3588. query ITII
  3589. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3590. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING)
  3591. FROM t
  3592. ORDER BY f2, f3, f1, last_value
  3593. ----
  3594. 1 a 1 NULL
  3595. 2 a 2 NULL
  3596. 2 a 3 NULL
  3597. 3 a 4 NULL
  3598. 4 b 5 NULL
  3599. 4 b 6 NULL
  3600. 1 c 7 NULL
  3601. 2 c 8 NULL
  3602. 3 c 9 NULL
  3603. 7 d 10 NULL
  3604. query ITII
  3605. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3606. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 PRECEDING AND 2 PRECEDING)
  3607. FROM t
  3608. ORDER BY f2, f3, f1, last_value
  3609. ----
  3610. 1 a 1 NULL
  3611. 2 a 2 NULL
  3612. 2 a 3 NULL
  3613. 3 a 4 NULL
  3614. 4 b 5 NULL
  3615. 4 b 6 NULL
  3616. 1 c 7 NULL
  3617. 2 c 8 NULL
  3618. 3 c 9 NULL
  3619. 7 d 10 NULL
  3620. query ITII
  3621. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3622. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 PRECEDING AND 10 PRECEDING)
  3623. FROM t
  3624. ORDER BY f2, f3, f1, last_value
  3625. ----
  3626. 1 a 1 NULL
  3627. 2 a 2 NULL
  3628. 2 a 3 NULL
  3629. 3 a 4 NULL
  3630. 4 b 5 NULL
  3631. 4 b 6 NULL
  3632. 1 c 7 NULL
  3633. 2 c 8 NULL
  3634. 3 c 9 NULL
  3635. 7 d 10 NULL
  3636. # ROWS BETWEEN y PRECEDING AND x PRECEDING, where x < y
  3637. query ITII
  3638. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3639. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND 0 PRECEDING)
  3640. FROM t
  3641. ORDER BY f2, f3, f1, last_value
  3642. ----
  3643. 1 a 1 1
  3644. 2 a 2 2
  3645. 2 a 3 2
  3646. 3 a 4 3
  3647. 4 b 5 4
  3648. 4 b 6 4
  3649. 1 c 7 1
  3650. 2 c 8 2
  3651. 3 c 9 3
  3652. 7 d 10 7
  3653. query ITII
  3654. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3655. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING)
  3656. FROM t
  3657. ORDER BY f2, f3, f1, last_value
  3658. ----
  3659. 1 a 1 2
  3660. 2 a 2 2
  3661. 2 a 3 3
  3662. 3 a 4 NULL
  3663. 4 b 5 4
  3664. 4 b 6 NULL
  3665. 1 c 7 2
  3666. 2 c 8 3
  3667. 3 c 9 NULL
  3668. 7 d 10 NULL
  3669. # ROWS BETWEEN y PRECEDING AND x PRECEDING, where x > y
  3670. query ITII
  3671. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3672. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING)
  3673. FROM t
  3674. ORDER BY f2, f3, f1, last_value
  3675. ----
  3676. 1 a 1 NULL
  3677. 2 a 2 NULL
  3678. 2 a 3 NULL
  3679. 3 a 4 NULL
  3680. 4 b 5 NULL
  3681. 4 b 6 NULL
  3682. 1 c 7 NULL
  3683. 2 c 8 NULL
  3684. 3 c 9 NULL
  3685. 7 d 10 NULL
  3686. query ITII
  3687. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3688. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND 2 PRECEDING)
  3689. FROM t
  3690. ORDER BY f2, f3, f1, last_value
  3691. ----
  3692. 1 a 1 NULL
  3693. 2 a 2 NULL
  3694. 2 a 3 NULL
  3695. 3 a 4 NULL
  3696. 4 b 5 NULL
  3697. 4 b 6 NULL
  3698. 1 c 7 NULL
  3699. 2 c 8 NULL
  3700. 3 c 9 NULL
  3701. 7 d 10 NULL
  3702. # ROWS BETWEEN y PRECEDING AND x PRECEDING, where x == y
  3703. query ITII
  3704. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3705. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 PRECEDING AND 0 PRECEDING)
  3706. FROM t
  3707. ORDER BY f2, f3, f1, last_value
  3708. ----
  3709. 1 a 1 1
  3710. 2 a 2 2
  3711. 2 a 3 2
  3712. 3 a 4 3
  3713. 4 b 5 4
  3714. 4 b 6 4
  3715. 1 c 7 1
  3716. 2 c 8 2
  3717. 3 c 9 3
  3718. 7 d 10 7
  3719. query ITII
  3720. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3721. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
  3722. FROM t
  3723. ORDER BY f2, f3, f1, last_value
  3724. ----
  3725. 1 a 1 2
  3726. 2 a 2 2
  3727. 2 a 3 3
  3728. 3 a 4 NULL
  3729. 4 b 5 4
  3730. 4 b 6 NULL
  3731. 1 c 7 2
  3732. 2 c 8 3
  3733. 3 c 9 NULL
  3734. 7 d 10 NULL
  3735. query ITII
  3736. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3737. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 2 PRECEDING AND 2 PRECEDING)
  3738. FROM t
  3739. ORDER BY f2, f3, f1, last_value
  3740. ----
  3741. 1 a 1 2
  3742. 2 a 2 3
  3743. 2 a 3 NULL
  3744. 3 a 4 NULL
  3745. 4 b 5 NULL
  3746. 4 b 6 NULL
  3747. 1 c 7 3
  3748. 2 c 8 NULL
  3749. 3 c 9 NULL
  3750. 7 d 10 NULL
  3751. query ITII
  3752. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3753. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 10 PRECEDING AND 10 PRECEDING)
  3754. FROM t
  3755. ORDER BY f2, f3, f1, last_value
  3756. ----
  3757. 1 a 1 NULL
  3758. 2 a 2 NULL
  3759. 2 a 3 NULL
  3760. 3 a 4 NULL
  3761. 4 b 5 NULL
  3762. 4 b 6 NULL
  3763. 1 c 7 NULL
  3764. 2 c 8 NULL
  3765. 3 c 9 NULL
  3766. 7 d 10 NULL
  3767. # ROWS BETWEEN UNBOUNDED PRECEDING AND x PRECEDING
  3768. query ITII
  3769. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3770. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING)
  3771. FROM t
  3772. ORDER BY f2, f3, f1, last_value
  3773. ----
  3774. 1 a 1 1
  3775. 2 a 2 2
  3776. 2 a 3 2
  3777. 3 a 4 3
  3778. 4 b 5 4
  3779. 4 b 6 4
  3780. 1 c 7 1
  3781. 2 c 8 2
  3782. 3 c 9 3
  3783. 7 d 10 7
  3784. query ITII
  3785. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3786. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
  3787. FROM t
  3788. ORDER BY f2, f3, f1, last_value
  3789. ----
  3790. 1 a 1 2
  3791. 2 a 2 2
  3792. 2 a 3 3
  3793. 3 a 4 NULL
  3794. 4 b 5 4
  3795. 4 b 6 NULL
  3796. 1 c 7 2
  3797. 2 c 8 3
  3798. 3 c 9 NULL
  3799. 7 d 10 NULL
  3800. query ITII
  3801. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3802. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 2 PRECEDING)
  3803. FROM t
  3804. ORDER BY f2, f3, f1, last_value
  3805. ----
  3806. 1 a 1 2
  3807. 2 a 2 3
  3808. 2 a 3 NULL
  3809. 3 a 4 NULL
  3810. 4 b 5 NULL
  3811. 4 b 6 NULL
  3812. 1 c 7 3
  3813. 2 c 8 NULL
  3814. 3 c 9 NULL
  3815. 7 d 10 NULL
  3816. query ITII
  3817. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3818. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 10 PRECEDING)
  3819. FROM t
  3820. ORDER BY f2, f3, f1, last_value
  3821. ----
  3822. 1 a 1 NULL
  3823. 2 a 2 NULL
  3824. 2 a 3 NULL
  3825. 3 a 4 NULL
  3826. 4 b 5 NULL
  3827. 4 b 6 NULL
  3828. 1 c 7 NULL
  3829. 2 c 8 NULL
  3830. 3 c 9 NULL
  3831. 7 d 10 NULL
  3832. # Test near-overflow behavior on offsets
  3833. # u64::MAX FOLLOWING
  3834. query error db error: ERROR: Window frame offsets greater than 1000000 are currently not supported
  3835. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3836. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 18446744073709551615 PRECEDING AND 18446744073709551615 PRECEDING)
  3837. FROM t
  3838. ORDER BY f2, f3, f1, last_value
  3839. query error db error: ERROR: Window frame offsets greater than 1000000 are currently not supported
  3840. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3841. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 18446744073709551615 PRECEDING AND 18446744073709551614 PRECEDING)
  3842. FROM t
  3843. ORDER BY f2, f3, f1, last_value
  3844. # u64::MAX PRECEDING
  3845. query error db error: ERROR: Window frame offsets greater than 1000000 are currently not supported
  3846. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3847. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 18446744073709551615 FOLLOWING AND 18446744073709551615 FOLLOWING)
  3848. FROM t
  3849. ORDER BY f2, f3, f1, last_value
  3850. query error db error: ERROR: Window frame offsets greater than 1000000 are currently not supported
  3851. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3852. SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 18446744073709551614 FOLLOWING AND 18446744073709551615 FOLLOWING)
  3853. FROM t
  3854. ORDER BY f2, f3, f1, last_value
  3855. # Test window aggregations with and without fusion
  3856. query III
  3857. WITH t (f1, f2, f3) AS (VALUES (1, 'a', 1), (2, 'a', 2), (2, 'a', 3), (3, 'a', 4), (4, 'b', 5), (4, 'b', 6), (1, 'c', 7), (2, 'c', 8), (3, 'c', 9), (7, 'd', 10))
  3858. SELECT
  3859. sum(f1) OVER (ORDER BY f2) s,
  3860. max(f1) OVER (ORDER BY f2) m,
  3861. count(f1) OVER (ORDER BY f3) c
  3862. FROM t
  3863. ORDER BY s, m, c;
  3864. ----
  3865. 8 3 1
  3866. 8 3 2
  3867. 8 3 3
  3868. 8 3 4
  3869. 16 4 5
  3870. 16 4 6
  3871. 22 4 7
  3872. 22 4 8
  3873. 22 4 9
  3874. 29 7 10