1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213 |
- # Copyright Materialize, Inc. and contributors. All rights reserved.
- #
- # Use of this software is governed by the Business Source License
- # included in the LICENSE file at the root of this repository.
- #
- # As of the Change Date specified in that file, in accordance with
- # the Business Source License, use of this software will be governed
- # by the Apache License, Version 2.0.
- statement ok
- CREATE VIEW billion AS SELECT * FROM generate_series(0, 999) AS x, generate_series(0, 999) AS y, generate_series(0, 999) AS z;
- statement ok
- CREATE TABLE edges(src INTEGER NOT NULL, dst INTEGER NOT NULL);
- # Test that this query doesn't compute the answer entirely as a constant
- # (as the way that works currently would require a huge memory blowup).
- #
- # If we make it so that reductions on constants
- # can be computed without writing out
- # the entire input constant in unary, we can get rid of this test:
- # See https://github.com/MaterializeInc/database-issues/issues/3723 .
- query T multiline
- EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR SELECT count(*) FROM billion;
- ----
- Explained Query:
- With
- cte l0 =
- Reduce aggregates=[count(*)] monotonic // { arity: 1 }
- Constant // { arity: 0 }
- - (() x 1000000000)
- Return // { arity: 1 }
- Union // { arity: 1 }
- Get l0 // { arity: 1 }
- Map (0) // { arity: 1 }
- Union // { arity: 0 }
- Negate // { arity: 0 }
- Project () // { arity: 0 }
- Get l0 // { arity: 1 }
- Constant // { arity: 0 }
- - ()
- Target cluster: quickstart
- EOF
- # Regression test for https://github.com/MaterializeInc/database-issues/issues/4672
- statement ok
- CREATE TABLE t1 (f1 int, f2 int);
- statement ok
- CREATE TABLE t2 (f1 int, f2 int);
- query IIIRR
- 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 ;
- ----
- # WITH MUTUALLY RECURSIVE support
- # -------------------------------
- # Fold `Constant` inputs in WMR branches.
- # In theory we should be able to run the WMR loop once under the assumption
- # that all initial LetRec bindings are empty. If do this, the `l0` binding
- # below will simplify to a constant.
- query T multiline
- EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR
- WITH MUTUALLY RECURSIVE
- c0(src INT, dst INT) AS (
- SELECT * FROM c0
- UNION
- SELECT src * 2, dst * 2 FROM (VALUES (31, 32), (33, 34)) AS constant(src, dst)
- UNION
- (
- SELECT src + 1, dst + 1 FROM (VALUES (41, 42), (43, 44), (44, 45)) AS constant(src, dst) WHERE src > 1
- EXCEPT
- SELECT src + 2, dst + 2 FROM (VALUES (41, 42), (43, 44), (44, 45)) AS constant(src, dst)
- )
- UNION
- (
- SELECT DISTINCT
- x.src, y.dst
- FROM
- (VALUES (51, 52), (52, 53), (53, 54), (54, 55)) AS x(src, dst),
- (VALUES (52, 53), (53, 54), (54, 55)) AS y(src, dst),
- (VALUES (53, 51), (54, 52), (54, 53)) AS z(src, dst)
- WHERE
- x.dst = y.src AND y.dst = z.src AND z.dst = x.src
- )
- )
- SELECT * FROM c0
- ----
- Explained Query:
- With Mutually Recursive
- cte l0 =
- Distinct project=[#0, #1] monotonic // { arity: 2 }
- Union // { arity: 2 }
- Get l0 // { arity: 2 }
- Constant // { arity: 2 }
- - (42, 43)
- - (44, 45)
- - (51, 53)
- - (52, 54)
- - (62, 64)
- - (66, 68)
- Return // { arity: 2 }
- Get l0 // { arity: 2 }
- Target cluster: quickstart
- EOF
- # Replace subtrees rooted at `Filter false` with `Constant <empty>`
- query T multiline
- EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR
- WITH MUTUALLY RECURSIVE
- c0(n INT) AS (
- SELECT src FROM edges WHERE false -- literal false
- UNION ALL
- SELECT dst FROM edges
- UNION ALL
- SELECT * FROM c0 WHERE n IS NULL -- impossible condition (depends on column_knowledge)
- UNION
- SELECT * FROM c0 WHERE n IS NOT NULL -- complement (always true)
- )
- SELECT * FROM c0
- ----
- Explained Query:
- With Mutually Recursive
- cte l0 =
- Distinct project=[#0{dst}] // { arity: 1 }
- Union // { arity: 1 }
- Project (#1{dst}) // { arity: 1 }
- ReadStorage materialize.public.edges // { arity: 2 }
- Get l0 // { arity: 1 }
- Return // { arity: 1 }
- Get l0 // { arity: 1 }
- Source materialize.public.edges
- Target cluster: quickstart
- EOF
- statement ok
- DROP TABLE t1;
- statement ok
- DROP TABLE t2;
- # Window function tests
- # These tests were mostly copied (at some point) from `window_funcs.slt`, but here they have `WITH ... VALUES ...`, i.e.
- # constant inputs. These are good to have because constant folding is a different code path from the normal execution.
- # ----------------------------------------------------------------------------------------------------------------------
- mode cockroach
- statement error db error: ERROR: window function pg_catalog\.row_number requires an OVER clause
- WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
- SELECT row_number() FROM t
- query IT
- WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
- SELECT row_number() OVER (ORDER BY x), x FROM t
- ORDER BY row_number
- ----
- 1 a
- 2 b
- 3 c
- query IT
- WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
- SELECT row_number() OVER (ORDER BY x DESC), x FROM t
- ORDER BY row_number
- ----
- 1 c
- 2 b
- 3 a
- query IT
- WITH t (x, y) AS (VALUES ('a', 98), ('b', 99), ('c', 98))
- SELECT row_number() OVER (PARTITION BY y ORDER BY x), x FROM t
- ORDER BY row_number, x
- ----
- 1 a
- 1 b
- 2 c
- query IT
- WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
- SELECT row_number() OVER (PARTITION BY y ORDER BY x DESC), x FROM t
- ORDER BY row_number, x
- ----
- 1 b
- 1 c
- 2 a
- query IT
- WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
- SELECT row_number() OVER (PARTITION BY x ORDER BY x), x FROM t
- ORDER BY row_number, x
- ----
- 1 a
- 1 b
- 1 c
- query IT
- WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
- SELECT row_number() OVER (PARTITION BY NULL ORDER BY 10000) AS q, a1.x
- FROM t AS a1, t AS a2
- ORDER BY q DESC
- ----
- 9 c
- 8 c
- 7 c
- 6 b
- 5 b
- 4 b
- 3 a
- 2 a
- 1 a
- # Make sure a non-column expression following the window function is correctly
- # handled.
- query ITT
- WITH t (x) AS (VALUES ('a'))
- SELECT row_number() OVER (PARTITION BY NULL) AS q, x, 'b'
- FROM t
- ----
- 1 a b
- # Regression test for database-issues#2730
- query II
- SELECT row_number() OVER (), row_number() OVER ()
- ----
- 1 1
- query II
- WITH t (x) AS (VALUES ('a'), ('b'))
- SELECT row_number() OVER (), row_number() OVER () from t
- ----
- 1 1
- 2 2
- # Regression for database-issues#2962
- query error window functions are not allowed in ON
- WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
- SELECT * FROM t AS v JOIN t ON row_number() over () > 1;
- query error window functions are not allowed in WHERE
- WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
- SELECT * FROM t
- WHERE row_number() over () > 1;
- query T
- WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
- SELECT DISTINCT ON (row_number() OVER ()) *
- FROM t
- ORDER BY row_number() OVER ()
- ----
- a
- b
- c
- # dense_rank
- query IT
- WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
- SELECT dense_rank() OVER (ORDER BY x), x FROM t
- ORDER BY dense_rank
- ----
- 1 a
- 2 b
- 3 c
- query IT
- WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'))
- SELECT dense_rank() OVER (ORDER BY x), x FROM t
- ORDER BY dense_rank
- ----
- 1 a
- 2 b
- 2 b
- 3 c
- query IT
- WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'), ('c'))
- SELECT dense_rank() OVER (ORDER BY x), x FROM t
- ORDER BY dense_rank
- ----
- 1 a
- 2 b
- 2 b
- 3 c
- 3 c
- query IT
- WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
- SELECT dense_rank() OVER (ORDER BY x DESC), x FROM t
- ORDER BY dense_rank
- ----
- 1 c
- 2 b
- 3 a
- query IT
- WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'))
- SELECT dense_rank() OVER (ORDER BY x DESC), x FROM t
- ORDER BY dense_rank
- ----
- 1 c
- 2 b
- 2 b
- 3 a
- query IT
- WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'), ('c'))
- SELECT dense_rank() OVER (ORDER BY x DESC), x FROM t
- ORDER BY dense_rank
- ----
- 1 c
- 1 c
- 2 b
- 2 b
- 3 a
- query IT
- WITH t (x, y) AS (VALUES ('a', 98), ('b', 99), ('c', 98))
- SELECT dense_rank() OVER (PARTITION BY y ORDER BY x), x FROM t
- ORDER BY dense_rank, x
- ----
- 1 a
- 1 b
- 2 c
- query IT
- WITH t (x, y) AS (VALUES ('a', 98), ('b', 99), ('c', 98), ('a', 98), ('a', 99))
- SELECT dense_rank() OVER (PARTITION BY y ORDER BY x), x FROM t
- ORDER BY dense_rank, x
- ----
- 1 a
- 1 a
- 1 a
- 2 b
- 2 c
- query IT
- WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
- SELECT dense_rank() OVER (PARTITION BY y ORDER BY x DESC), x FROM t
- ORDER BY dense_rank, x
- ----
- 1 b
- 1 c
- 2 a
- query IT
- WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
- SELECT dense_rank() OVER (PARTITION BY x ORDER BY x), x FROM t
- ORDER BY dense_rank, x
- ----
- 1 a
- 1 b
- 1 c
- query IT
- WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
- SELECT dense_rank() OVER (PARTITION BY NULL ORDER BY 10000) AS q, a1.x
- FROM t AS a1, t AS a2
- ORDER BY q DESC, a1.x DESC
- ----
- 1 c
- 1 c
- 1 c
- 1 b
- 1 b
- 1 b
- 1 a
- 1 a
- 1 a
- # Make sure a non-column expression following the window function is correctly
- # handled.
- query ITT
- WITH t (x) AS (VALUES ('a'))
- SELECT dense_rank() OVER (PARTITION BY NULL) AS q, x, 'b'
- FROM t
- ----
- 1 a b
- query IITT
- 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))
- SELECT dense_rank() OVER (PARTITION BY y ORDER BY x DESC, z), x, y, z
- FROM t
- ORDER BY y, x DESC, z
- ----
- 1 3 a 1
- 2 2 a 1
- 2 2 a 1
- 3 1 a 1
- 1 4 b 0
- 2 4 b 1
- 1 3 c 1
- 2 2 c NaN
- 3 1 c NaN
- # NaNs have the same rank
- query IITT
- 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))
- SELECT dense_rank() OVER (PARTITION BY y ORDER BY z DESC), x, y, z
- FROM t
- ORDER BY y, z DESC, x
- ----
- 1 1 a 1
- 1 2 a 1
- 1 2 a 1
- 1 3 a 1
- 1 4 b 1
- 2 4 b 0
- 1 1 c NaN
- 1 2 c NaN
- 2 3 c 1
- ## lag
- # Simple cases
- query TT
- WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
- SELECT lag(x) OVER (ORDER BY x), x FROM t
- ORDER BY x, lag
- ----
- NULL a
- a b
- b c
- query TT
- WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'))
- SELECT lag(x) OVER (ORDER BY x), x FROM t
- ORDER BY x, lag
- ----
- NULL a
- a b
- b b
- b c
- query TT
- WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'), ('c'))
- SELECT lag(x) OVER (ORDER BY x), x FROM t
- ORDER BY x, lag
- ----
- NULL a
- a b
- b b
- b c
- c c
- query TT
- WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
- SELECT lag(x) OVER (ORDER BY x DESC), x FROM t
- ORDER BY x, lag
- ----
- b a
- c b
- NULL c
- query TT
- WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'))
- SELECT lag(x) OVER (ORDER BY x DESC), x FROM t
- ORDER BY x, lag
- ----
- b a
- b b
- c b
- NULL c
- query TT
- WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'), ('c'))
- SELECT lag(x) OVER (ORDER BY x DESC), x FROM t
- ORDER BY x, lag
- ----
- b a
- b b
- c b
- c c
- NULL c
- query TT
- WITH t (x, y) AS (VALUES ('a', 98), ('b', 99), ('c', 98))
- SELECT lag(x) OVER (PARTITION BY y ORDER BY x), x FROM t
- ORDER BY x, lag
- ----
- NULL a
- NULL b
- a c
- query TT
- WITH t (x, y) AS (VALUES ('a', 98), ('b', 99), ('c', 98), ('a', 98), ('a', 99))
- SELECT lag(x) OVER (PARTITION BY y ORDER BY x), x FROM t
- ORDER BY x, lag
- ----
- a a
- NULL a
- NULL a
- a b
- a c
- query TT
- WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
- SELECT lag(x) OVER (PARTITION BY y ORDER BY x DESC), x FROM t
- ORDER BY x, lag
- ----
- c a
- NULL b
- NULL c
- query TT
- WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
- SELECT lag(x) OVER (PARTITION BY x ORDER BY x), x FROM t
- ORDER BY x, lag
- ----
- NULL a
- NULL b
- NULL c
- query TT
- WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
- SELECT lag(a1.x) OVER (PARTITION BY NULL ORDER BY 10000) AS q, a1.x
- FROM t AS a1, t AS a2
- ORDER BY q DESC, a1.x DESC
- ----
- NULL a
- c c
- c c
- b c
- b b
- b b
- a b
- a a
- a a
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN 1
- 3 c 1 2
- 4 b 1 NULL
- 4 b 0 4
- 1 a 1 NULL
- 2 a 1 1
- 2 a 1 2
- 3 a 1 2
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1, 1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN 1
- 3 c 1 2
- 4 b 1 NULL
- 4 b 0 4
- 1 a 1 NULL
- 2 a 1 1
- 2 a 1 2
- 3 a 1 2
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1, 1, NULL) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN 1
- 3 c 1 2
- 4 b 1 NULL
- 4 b 0 4
- 1 a 1 NULL
- 2 a 1 1
- 2 a 1 2
- 3 a 1 2
- # With default value
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1, 1, -1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 -1
- 1 c NaN -1
- 2 c NaN 1
- 3 c 1 2
- 4 b 1 -1
- 4 b 0 4
- 1 a 1 -1
- 2 a 1 1
- 2 a 1 2
- 3 a 1 2
- # Complex expressions
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1 + coalesce(nullif(f3, 'NaN'), -10)) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN -9
- 3 c 1 -8
- 4 b 1 NULL
- 4 b 0 5
- 1 a 1 NULL
- 2 a 1 2
- 2 a 1 3
- 3 a 1 3
- # Nulls in the first argument
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(NULL::int) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 NULL
- 2 a 1 NULL
- 3 a 1 NULL
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(nullif(f1, 4)) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN 1
- 3 c 1 2
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 1
- 2 a 1 2
- 3 a 1 2
- # Nulls in the first argument with a default value in the third argument
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(NULL::int, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 NULL
- 2 a 1 NULL
- 3 a 1 NULL
- # Zero offset
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 7
- 1 c NaN 1
- 2 c NaN 2
- 3 c 1 3
- 4 b 1 4
- 4 b 0 4
- 1 a 1 1
- 2 a 1 2
- 2 a 1 2
- 3 a 1 3
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1 + f3, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 2
- 1 c NaN NaN
- 2 c NaN NaN
- 3 c 1 4
- 4 b 1 5
- 4 b 0 4
- 1 a 1 2
- 2 a 1 3
- 2 a 1 3
- 3 a 1 4
- # Positive offsets
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1, 2) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 1
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 1
- 2 a 1 NULL
- 3 a 1 2
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1 + f3, 2) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NaN
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 2
- 2 a 1 NULL
- 3 a 1 3
- # Out of range positive offsets
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1, 10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 NULL
- 2 a 1 NULL
- 3 a 1 NULL
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1 + f3, 10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 NULL
- 2 a 1 NULL
- 3 a 1 NULL
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1 + f3, 10, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 0
- 1 c NaN 0
- 2 c NaN 0
- 3 c 1 0
- 4 b 1 0
- 4 b 0 0
- 1 a 1 0
- 2 a 1 0
- 2 a 1 0
- 3 a 1 0
- # Negative offsets
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1, -1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN 2
- 2 c NaN 3
- 3 c 1 NULL
- 4 b 1 4
- 4 b 0 NULL
- 1 a 1 2
- 2 a 1 2
- 2 a 1 3
- 3 a 1 NULL
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1 + f3, -1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN NaN
- 2 c NaN 4
- 3 c 1 NULL
- 4 b 1 4
- 4 b 0 NULL
- 1 a 1 3
- 2 a 1 3
- 2 a 1 4
- 3 a 1 NULL
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1 + f3, -2) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN 4
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 3
- 2 a 1 4
- 2 a 1 NULL
- 3 a 1 NULL
- # Out of range negative offsets
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1, -10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 NULL
- 2 a 1 NULL
- 3 a 1 NULL
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1 + f3, -10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 NULL
- 2 a 1 NULL
- 3 a 1 NULL
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1, -10, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 0
- 1 c NaN 0
- 2 c NaN 0
- 3 c 1 0
- 4 b 1 0
- 4 b 0 0
- 1 a 1 0
- 2 a 1 0
- 2 a 1 0
- 3 a 1 0
- # Variable per row offsets
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1, f1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 1
- 2 a 1 NULL
- 3 a 1 1
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1, f1 - 1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN 1
- 2 c NaN 1
- 3 c 1 1
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 1
- 2 a 1 1
- 2 a 1 2
- 3 a 1 2
- # Null offsets
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1, NULL) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 NULL
- 2 a 1 NULL
- 3 a 1 NULL
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1, nullif(f1, 1)) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 1
- 2 a 1 NULL
- 3 a 1 1
- # Null offset with default value
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1, NULL, -10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 NULL
- 2 a 1 NULL
- 3 a 1 NULL
- # Variable per row default value
- query ITTT
- 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))
- SELECT f1, f2, f3, lag(f1, 1, f3) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lag
- ----
- 7 d -5 -5
- 1 c NaN NaN
- 2 c NaN 1
- 3 c 1 2
- 4 b 1 1
- 4 b 0 4
- 1 a 1 1
- 2 a 1 1
- 2 a 1 2
- 3 a 1 2
- # reduce_elision code path
- # Default offset
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lag(f1) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ----
- 1 NULL
- 3 NULL
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lag(f1, 1) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ----
- 1 NULL
- 3 NULL
- # Zero offset
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lag(f1, 0) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ----
- 1 1
- 3 3
- # Negative offset
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lag(f1, -1) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ----
- 1 NULL
- 3 NULL
- # Default value with offset 1
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lag(f1, 1, 10) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ----
- 1 10
- 3 10
- # Default value with offset 0
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lag(f1, 0, 10) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ----
- 1 1
- 3 3
- # Complex expression
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lag(f1 * f2, 0, 10) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ----
- 1 2
- 3 12
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lag(f1 * f2, 1, f1 * f2 + 1) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ----
- 1 3
- 3 13
- # Complex offset
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lag(f1 * f2, f1 - f1) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ----
- 1 2
- 3 12
- query II rowsort
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lag(f1 * f2, f1 - 1) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ----
- 3 NULL
- 1 2
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lag(f1 * f2, f2 - 2 * f1, f2) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ----
- 1 2
- 3 4
- # Complex default value
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lag(f1, 0, f1 * f2) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ----
- 1 1
- 3 3
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lag(f1, 1, f1 * f2) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ----
- 1 2
- 3 12
- ## lead
- # Simple cases
- query TT
- WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
- SELECT lead(x) OVER (ORDER BY x), x FROM t
- ORDER BY x, lead
- ----
- b a
- c b
- NULL c
- query TT
- WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'))
- SELECT lead(x) OVER (ORDER BY x), x FROM t
- ORDER BY x, lead
- ----
- b a
- b b
- c b
- NULL c
- query TT
- WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'), ('c'))
- SELECT lead(x) OVER (ORDER BY x), x FROM t
- ORDER BY x, lead
- ----
- b a
- b b
- c b
- c c
- NULL c
- query TT
- WITH t (x) AS (VALUES ('a'), ('b'), ('c'))
- SELECT lead(x) OVER (ORDER BY x DESC), x FROM t
- ORDER BY x, lead
- ----
- NULL a
- a b
- b c
- query TT
- WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'))
- SELECT lead(x) OVER (ORDER BY x DESC), x FROM t
- ORDER BY x, lead
- ----
- NULL a
- a b
- b b
- b c
- query TT
- WITH t (x) AS (VALUES ('a'), ('b'), ('b'), ('c'), ('c'))
- SELECT lead(x) OVER (ORDER BY x DESC), x FROM t
- ORDER BY x, lead
- ----
- NULL a
- a b
- b b
- b c
- c c
- query TT
- WITH t (x, y) AS (VALUES ('a', 98), ('b', 99), ('c', 98))
- SELECT lead(x) OVER (PARTITION BY y ORDER BY x), x FROM t
- ORDER BY x, lead
- ----
- c a
- NULL b
- NULL c
- query TT
- WITH t (x, y) AS (VALUES ('a', 98), ('b', 99), ('c', 98), ('a', 98), ('a', 99))
- SELECT lead(x) OVER (PARTITION BY y ORDER BY x), x FROM t
- ORDER BY x, lead
- ----
- a a
- b a
- c a
- NULL b
- NULL c
- query TT
- WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
- SELECT lead(x) OVER (PARTITION BY y ORDER BY x DESC), x FROM t
- ORDER BY x, lead
- ----
- NULL a
- NULL b
- a c
- query TT
- WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
- SELECT lead(x) OVER (PARTITION BY x ORDER BY x), x FROM t
- ORDER BY x, lead
- ----
- NULL a
- NULL b
- NULL c
- query TT
- WITH t (x, y) AS (VALUES ('a', 1), ('b', 2), ('c', 1))
- SELECT lead(a1.x) OVER (PARTITION BY NULL ORDER BY 10000) AS q, a1.x
- FROM t AS a1, t AS a2
- ORDER BY q DESC, a1.x DESC
- ----
- NULL c
- c c
- c c
- c b
- b b
- b b
- b a
- a a
- a a
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN 2
- 2 c NaN 3
- 3 c 1 NULL
- 4 b 1 4
- 4 b 0 NULL
- 1 a 1 2
- 2 a 1 2
- 2 a 1 3
- 3 a 1 NULL
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1, 1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN 2
- 2 c NaN 3
- 3 c 1 NULL
- 4 b 1 4
- 4 b 0 NULL
- 1 a 1 2
- 2 a 1 2
- 2 a 1 3
- 3 a 1 NULL
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1, 1, NULL) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN 2
- 2 c NaN 3
- 3 c 1 NULL
- 4 b 1 4
- 4 b 0 NULL
- 1 a 1 2
- 2 a 1 2
- 2 a 1 3
- 3 a 1 NULL
- # With default value
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1, 1, -1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 -1
- 1 c NaN 2
- 2 c NaN 3
- 3 c 1 -1
- 4 b 1 4
- 4 b 0 -1
- 1 a 1 2
- 2 a 1 2
- 2 a 1 3
- 3 a 1 -1
- # Complex expressions
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1 + coalesce(nullif(f3, 'NaN'), -10)) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN -8
- 2 c NaN 4
- 3 c 1 NULL
- 4 b 1 4
- 4 b 0 NULL
- 1 a 1 3
- 2 a 1 3
- 2 a 1 4
- 3 a 1 NULL
- # Nulls in the first argument
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(NULL::int) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 NULL
- 2 a 1 NULL
- 3 a 1 NULL
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(nullif(f1, 4)) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN 2
- 2 c NaN 3
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 2
- 2 a 1 2
- 2 a 1 3
- 3 a 1 NULL
- # Nulls in the first argument with a default value in the third argument
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(NULL::int, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 NULL
- 2 a 1 NULL
- 3 a 1 NULL
- # Zero offset
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 7
- 1 c NaN 1
- 2 c NaN 2
- 3 c 1 3
- 4 b 1 4
- 4 b 0 4
- 1 a 1 1
- 2 a 1 2
- 2 a 1 2
- 3 a 1 3
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1 + f3, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 2
- 1 c NaN NaN
- 2 c NaN NaN
- 3 c 1 4
- 4 b 1 5
- 4 b 0 4
- 1 a 1 2
- 2 a 1 3
- 2 a 1 3
- 3 a 1 4
- # Positive offsets
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1, 2) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN 3
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 2
- 2 a 1 3
- 2 a 1 NULL
- 3 a 1 NULL
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1 + f3, 2) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN 4
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 3
- 2 a 1 4
- 2 a 1 NULL
- 3 a 1 NULL
- # Out of range positive offsets
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1, 10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 NULL
- 2 a 1 NULL
- 3 a 1 NULL
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1 + f3, 10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 NULL
- 2 a 1 NULL
- 3 a 1 NULL
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1 + f3, 10, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 0
- 1 c NaN 0
- 2 c NaN 0
- 3 c 1 0
- 4 b 1 0
- 4 b 0 0
- 1 a 1 0
- 2 a 1 0
- 2 a 1 0
- 3 a 1 0
- # Negative offsets
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1, -1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN 1
- 3 c 1 2
- 4 b 1 NULL
- 4 b 0 4
- 1 a 1 NULL
- 2 a 1 1
- 2 a 1 2
- 3 a 1 2
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1 + f3, -1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NaN
- 3 c 1 NaN
- 4 b 1 NULL
- 4 b 0 5
- 1 a 1 NULL
- 2 a 1 2
- 2 a 1 3
- 3 a 1 3
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1 + f3, -2) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NaN
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 2
- 2 a 1 NULL
- 3 a 1 3
- # Out of range negative offsets
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1, -10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 NULL
- 2 a 1 NULL
- 3 a 1 NULL
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1 + f3, -10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 NULL
- 2 a 1 NULL
- 3 a 1 NULL
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1, -10, 0) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 0
- 1 c NaN 0
- 2 c NaN 0
- 3 c 1 0
- 4 b 1 0
- 4 b 0 0
- 1 a 1 0
- 2 a 1 0
- 2 a 1 0
- 3 a 1 0
- # Variable per row offsets
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1, f1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN 2
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 2
- 2 a 1 3
- 2 a 1 NULL
- 3 a 1 NULL
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1, f1 - 1) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN 1
- 2 c NaN 3
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 1
- 2 a 1 2
- 2 a 1 3
- 3 a 1 NULL
- # Null offsets
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1, NULL) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 NULL
- 2 a 1 NULL
- 3 a 1 NULL
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1, nullif(f1, 1)) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 3
- 2 a 1 NULL
- 3 a 1 NULL
- # Null offset with default value
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1, NULL, -10) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 NULL
- 1 c NaN NULL
- 2 c NaN NULL
- 3 c 1 NULL
- 4 b 1 NULL
- 4 b 0 NULL
- 1 a 1 NULL
- 2 a 1 NULL
- 2 a 1 NULL
- 3 a 1 NULL
- # Variable per row default value
- query ITTT
- 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))
- SELECT f1, f2, f3, lead(f1, 1, f3) OVER (PARTITION BY f2 ORDER BY f3 DESC, f1)
- FROM t
- ORDER BY f2 DESC, f3 DESC, f1, lead
- ----
- 7 d -5 -5
- 1 c NaN 2
- 2 c NaN 3
- 3 c 1 1
- 4 b 1 4
- 4 b 0 0
- 1 a 1 2
- 2 a 1 2
- 2 a 1 3
- 3 a 1 1
- # reduce_elision code path
- # Default offset
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lead(f1) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ORDER BY 1, 2
- ----
- 1 NULL
- 3 NULL
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lead(f1, 1) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ORDER BY 1, 2
- ----
- 1 NULL
- 3 NULL
- # Zero offset
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lead(f1, 0) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ORDER BY 1, 2
- ----
- 1 1
- 3 3
- # Negative offset
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lead(f1, -1) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ORDER BY 1, 2
- ----
- 1 NULL
- 3 NULL
- # Default value with offset 1
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lead(f1, 1, 10) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ORDER BY 1, 2
- ----
- 1 10
- 3 10
- # Default value with offset 0
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lead(f1, 0, 10) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ORDER BY 1, 2
- ----
- 1 1
- 3 3
- # Complex expression
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lead(f1 * f2, 0, 10) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ORDER BY 1, 2
- ----
- 1 2
- 3 12
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lead(f1 * f2, 1, f1 * f2 + 1) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ORDER BY 1, 2
- ----
- 1 3
- 3 13
- # Complex offset
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lead(f1 * f2, f1 - f1) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ORDER BY 1, 2
- ----
- 1 2
- 3 12
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lead(f1 * f2, f1 - 1) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ORDER BY 1, 2
- ----
- 1 2
- 3 NULL
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lead(f1 * f2, f2 - 2 * f1, f2) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ORDER BY 1, 2
- ----
- 1 2
- 3 4
- # Complex default value
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lead(f1, 0, f1 * f2) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ORDER BY 1, 2
- ----
- 1 1
- 3 3
- query II
- WITH t (f1, f2) AS (VALUES (1, 2), (1, 2), (3, 4))
- SELECT f1, lead(f1, 1, f1 * f2) OVER (PARTITION BY f1, f2)
- FROM (SELECT DISTINCT f1, f2 FROM t) q
- ORDER BY 1, 2
- ----
- 1 2
- 3 12
- ## window frames
- # Invalid frame start
- query error frame start cannot be UNBOUNDED FOLLOWING
- SELECT row_number() OVER (ROWS UNBOUNDED FOLLOWING)
- # Invalid frame end
- query error frame end cannot be UNBOUNDED PRECEDING
- SELECT row_number() OVER (ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED PRECEDING)
- # End frame can't be of a type that comes before the start bound
- query error frame starting from current row cannot have preceding rows
- SELECT row_number() OVER (ROWS BETWEEN CURRENT ROW AND 1 PRECEDING)
- query error frame starting from following row cannot have preceding rows
- SELECT row_number() OVER (ROWS BETWEEN 1 FOLLOWING AND 1 PRECEDING)
- query error frame starting from following row cannot have preceding rows
- SELECT row_number() OVER (ROWS BETWEEN 1 FOLLOWING AND CURRENT ROW)
- # But end offsets can come before start offsets
- query I
- SELECT row_number() OVER (ROWS BETWEEN 1 PRECEDING AND 2 PRECEDING)
- ----
- 1
- query I
- SELECT row_number() OVER (ROWS BETWEEN 2 FOLLOWING AND 1 FOLLOWING)
- ----
- 1
- # Negative offsets are not allowed
- # Our error message is different from Postgres, so it's not checked here
- query error
- SELECT row_number() OVER (ROWS -1 PRECEDING)
- query error
- SELECT row_number() OVER (ROWS -1 FOLLOWING)
- # Current implementation restrictions
- # RANGE is not supported outside of the default frame
- query error RANGE in non-default window frames not yet supported
- SELECT row_number() OVER (RANGE BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
- query error RANGE in non-default window frames not yet supported
- SELECT row_number() OVER (RANGE BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING)
- query error RANGE in non-default window frames not yet supported
- SELECT row_number() OVER (RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
- query error RANGE in non-default window frames not yet supported
- SELECT row_number() OVER (RANGE BETWEEN 1 PRECEDING AND 1 PRECEDING)
- query error RANGE in non-default window frames not yet supported
- SELECT row_number() OVER (RANGE BETWEEN 1 PRECEDING AND CURRENT ROW)
- query error RANGE in non-default window frames not yet supported
- SELECT row_number() OVER (RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING)
- query error RANGE in non-default window frames not yet supported
- SELECT row_number() OVER (RANGE BETWEEN 1 PRECEDING AND UNBOUNDED FOLLOWING)
- query error RANGE in non-default window frames not yet supported
- SELECT row_number() OVER (RANGE BETWEEN CURRENT ROW AND CURRENT ROW)
- query error RANGE in non-default window frames not yet supported
- SELECT row_number() OVER (RANGE BETWEEN CURRENT ROW AND 1 FOLLOWING)
- query error RANGE in non-default window frames not yet supported
- SELECT row_number() OVER (RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
- query error RANGE in non-default window frames not yet supported
- SELECT row_number() OVER (RANGE BETWEEN 1 FOLLOWING AND 1 FOLLOWING)
- query error RANGE in non-default window frames not yet supported
- SELECT row_number() OVER (RANGE BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)
- # Default window frame works fine
- query I
- SELECT row_number() OVER ()
- ----
- 1
- query I
- SELECT row_number() OVER (RANGE UNBOUNDED PRECEDING)
- ----
- 1
- query I
- SELECT row_number() OVER (RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
- ----
- 1
- # GROUPS is not supported at all
- query error GROUPS in window frames not yet supported
- SELECT row_number() OVER (GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
- query error GROUPS in window frames not yet supported
- SELECT row_number() OVER (GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
- query error GROUPS in window frames not yet supported
- SELECT row_number() OVER (GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING)
- query error GROUPS in window frames not yet supported
- SELECT row_number() OVER (GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
- query error GROUPS in window frames not yet supported
- SELECT row_number() OVER (GROUPS BETWEEN 1 PRECEDING AND 1 PRECEDING)
- query error GROUPS in window frames not yet supported
- SELECT row_number() OVER (GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW)
- query error GROUPS in window frames not yet supported
- SELECT row_number() OVER (GROUPS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
- query error GROUPS in window frames not yet supported
- SELECT row_number() OVER (GROUPS BETWEEN 1 PRECEDING AND UNBOUNDED FOLLOWING)
- query error GROUPS in window frames not yet supported
- SELECT row_number() OVER (GROUPS BETWEEN CURRENT ROW AND CURRENT ROW)
- query error GROUPS in window frames not yet supported
- SELECT row_number() OVER (GROUPS BETWEEN CURRENT ROW AND 1 FOLLOWING)
- query error GROUPS in window frames not yet supported
- SELECT row_number() OVER (GROUPS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
- query error GROUPS in window frames not yet supported
- SELECT row_number() OVER (GROUPS BETWEEN 1 FOLLOWING AND 1 FOLLOWING)
- query error GROUPS in window frames not yet supported
- SELECT row_number() OVER (GROUPS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)
- ## first_value
- # Default frame (RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- # ROWS BETWEEN UNBOUNDED PRECEDING AND x PRECEDING
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 NULL
- 4 b 6 4
- 1 c 7 NULL
- 2 c 8 1
- 3 c 9 1
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND 2 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 1
- 3 a 4 1
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 1
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND 10 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- # ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- # ROWS BETWEEN UNBOUNDED PRECEDING AND x FOLLOWING
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND 0 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND 10 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- # ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- # ROWS BETWEEN 0 PRECEDING AND x PRECEDING
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 PRECEDING AND 2 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 PRECEDING AND 10 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- # ROWS BETWEEN x PRECEDING AND 0 PRECEDING
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 PRECEDING AND 0 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 2
- 3 a 4 2
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 2
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 PRECEDING AND 0 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 2
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 10 PRECEDING AND 0 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- # ROWS BETWEEN x PRECEDING AND y PRECEDING, where x < y
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 PRECEDING AND 2 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- # ROWS BETWEEN x PRECEDING AND y PRECEDING, where x > y
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 PRECEDING AND 0 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 2
- 3 a 4 2
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 2
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 1
- 2 a 3 1
- 3 a 4 2
- 4 b 5 NULL
- 4 b 6 4
- 1 c 7 NULL
- 2 c 8 1
- 3 c 9 1
- 7 d 10 NULL
- # ROWS BETWEEN x PRECEDING AND y PRECEDING, where x == y
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 PRECEDING AND 0 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 1
- 2 a 3 2
- 3 a 4 2
- 4 b 5 NULL
- 4 b 6 4
- 1 c 7 NULL
- 2 c 8 1
- 3 c 9 2
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 PRECEDING AND 2 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 1
- 3 a 4 2
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 1
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 10 PRECEDING AND 10 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- # ROWS BETWEEN x PRECEDING AND CURRENT ROW
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 PRECEDING AND CURRENT ROW)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 2
- 3 a 4 2
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 2
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 2
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 10 PRECEDING AND CURRENT ROW)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- # ROWS BETWEEN x PRECEDING AND x FOLLOWING
- # Equivalent to ROWS BETWEEN x PRECEDING AND CURRENT ROW for first_value
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 PRECEDING AND 1 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 2
- 3 a 4 2
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 2
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 PRECEDING AND 1 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 2
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 10 PRECEDING AND 1 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- # ROWS BETWEEN x PRECEDING AND UNBOUNDED FOLLOWING
- # Equivalent to ROWS BETWEEN x PRECEDING AND CURRENT ROW for first_value
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 PRECEDING AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 PRECEDING AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 2
- 3 a 4 2
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 2
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 2
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 10 PRECEDING AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- # ROWS BETWEEN CURRENT ROW AND CURRENT ROW
- # Always returns current row
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN CURRENT ROW AND CURRENT ROW)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- # ROWS BETWEEN CURRENT ROW AND x FOLLOWING
- # Always returns current row
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN CURRENT ROW AND 0 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN CURRENT ROW AND 10 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- # ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
- # Always returns current row
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- # ROWS BETWEEN 0 FOLLOWING AND x FOLLOWING
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 FOLLOWING AND 1 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 FOLLOWING AND 2 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 FOLLOWING AND 10 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- # ROWS BETWEEN x FOLLOWING AND 0 FOLLOWING
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 FOLLOWING AND 0 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 FOLLOWING AND 0 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 10 FOLLOWING AND 0 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- # ROWS BETWEEN x FOLLOWING AND y FOLLOWING, where x < y
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 FOLLOWING AND 1 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 2
- 2 a 2 2
- 2 a 3 3
- 3 a 4 NULL
- 4 b 5 4
- 4 b 6 NULL
- 1 c 7 2
- 2 c 8 3
- 3 c 9 NULL
- 7 d 10 NULL
- # ROWS BETWEEN x FOLLOWING AND y FOLLOWING, where x > y
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 FOLLOWING AND 0 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 FOLLOWING AND 1 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- # ROWS BETWEEN x FOLLOWING AND y FOLLOWING, where x == y
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 FOLLOWING AND 0 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 2
- 2 a 2 2
- 2 a 3 3
- 3 a 4 NULL
- 4 b 5 4
- 4 b 6 NULL
- 1 c 7 2
- 2 c 8 3
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 FOLLOWING AND 2 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 2
- 2 a 2 3
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 3
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 10 FOLLOWING AND 10 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- # ROWS BETWEEN x FOLLOWING AND UNBOUNDED FOLLOWING
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 0 FOLLOWING AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 2
- 2 a 2 2
- 2 a 3 3
- 3 a 4 NULL
- 4 b 5 4
- 4 b 6 NULL
- 1 c 7 2
- 2 c 8 3
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 2 FOLLOWING AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 2
- 2 a 2 3
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 3
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 10 FOLLOWING AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- # Test near-overflow behavior on offsets
- # u64::MAX FOLLOWING
- query error db error: ERROR: Window frame offsets greater than 1000000 are currently not supported
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 18446744073709551615 FOLLOWING AND 18446744073709551615 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- query error db error: ERROR: Window frame offsets greater than 1000000 are currently not supported
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 18446744073709551614 FOLLOWING AND 18446744073709551615 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- # u64::MAX PRECEDING
- query error db error: ERROR: Window frame offsets greater than 1000000 are currently not supported
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 18446744073709551615 PRECEDING AND 18446744073709551615 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- query error db error: ERROR: Window frame offsets greater than 1000000 are currently not supported
- 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))
- SELECT f1, f2, f3, first_value(f1) OVER (PARTITION BY f2 ORDER BY f1, f3 ROWS BETWEEN 18446744073709551615 PRECEDING AND 18446744073709551614 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, first_value
- ## last_value
- # Default frame (RANGE BETWEEN UNBOUNDED FOLLOWING AND CURRENT ROW)
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- # Default frame with large peer group
- # Note: there are multiple valid results of this query (because the default frame is up through the current row's last
- # ORDER BY peer, and the ordering among ORDER BY peers is unspecified), but we make the result stable by internally
- # always adding all remaining columns into our orderings.
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f3) OVER (PARTITION BY f2 ORDER BY f1)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 3
- 2 a 3 3
- 3 a 4 4
- 4 b 5 6
- 4 b 6 6
- 1 c 7 7
- 2 c 8 8
- 3 c 9 9
- 7 d 10 10
- # ROWS BETWEEN x FOLLOWING AND UNBOUNDED FOLLOWING
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 FOLLOWING AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 NULL
- 4 b 6 4
- 1 c 7 NULL
- 2 c 8 1
- 3 c 9 1
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 2 FOLLOWING AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 1
- 3 a 4 1
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 1
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 10 FOLLOWING AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- # ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- # ROWS BETWEEN x PRECEDING AND UNBOUNDED FOLLOWING
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 PRECEDING AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 10 PRECEDING AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- # ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- # ROWS BETWEEN x FOLLOWING AND 0 FOLLOWING
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 FOLLOWING AND 0 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 2 FOLLOWING AND 0 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 10 FOLLOWING AND 0 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- # ROWS BETWEEN 0 FOLLOWING AND x FOLLOWING
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 FOLLOWING AND 1 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 2
- 3 a 4 2
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 2
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 FOLLOWING AND 2 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 2
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 FOLLOWING AND 10 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- # ROWS BETWEEN y FOLLOWING AND x FOLLOWING, where x < y
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 FOLLOWING AND 0 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 2 FOLLOWING AND 1 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- # ROWS BETWEEN y FOLLOWING AND x FOLLOWING, where x > y
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 FOLLOWING AND 1 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 2
- 3 a 4 2
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 2
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 1
- 2 a 3 1
- 3 a 4 2
- 4 b 5 NULL
- 4 b 6 4
- 1 c 7 NULL
- 2 c 8 1
- 3 c 9 1
- 7 d 10 NULL
- # ROWS BETWEEN x FOLLOWING AND y FOLLOWING, where x == y
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 FOLLOWING AND 0 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 1
- 2 a 3 2
- 3 a 4 2
- 4 b 5 NULL
- 4 b 6 4
- 1 c 7 NULL
- 2 c 8 1
- 3 c 9 2
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 2 FOLLOWING AND 2 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 1
- 3 a 4 2
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 1
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 10 FOLLOWING AND 10 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- # ROWS BETWEEN CURRENT ROW AND x FOLLOWING
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN CURRENT ROW AND 0 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 2
- 3 a 4 2
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 2
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 2
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN CURRENT ROW AND 10 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- # ROWS BETWEEN x PRECEDING AND x FOLLOWING
- # Equivalent to ROWS BETWEEN CURRENT ROW AND x FOLLOWING for last_value
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND 0 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 2
- 3 a 4 2
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 2
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND 2 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 2
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND 10 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- # ROWS BETWEEN UNBOUNDED PRECEDING AND x FOLLOWING
- # Equivalent to ROWS BETWEEN CURRENT ROW AND x FOLLOWING for last_value
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 2
- 3 a 4 2
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 2
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 2
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 10 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 1
- 2 a 3 1
- 3 a 4 1
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 1
- 3 c 9 1
- 7 d 10 7
- # ROWS BETWEEN CURRENT ROW AND CURRENT ROW
- # Always returns current row
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN CURRENT ROW AND CURRENT ROW)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- # ROWS BETWEEN x PRECEDING AND CURRENT ROW
- # Always returns current row
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 PRECEDING AND CURRENT ROW)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 10 PRECEDING AND CURRENT ROW)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- # ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
- # Always returns current row
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- # ROWS BETWEEN x PRECEDING AND 0 PRECEDING
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND 0 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 2 PRECEDING AND 0 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 10 PRECEDING AND 0 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- # ROWS BETWEEN 0 PRECEDING AND x PRECEDING
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 PRECEDING AND 2 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 PRECEDING AND 10 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- # ROWS BETWEEN y PRECEDING AND x PRECEDING, where x < y
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND 0 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 2
- 2 a 2 2
- 2 a 3 3
- 3 a 4 NULL
- 4 b 5 4
- 4 b 6 NULL
- 1 c 7 2
- 2 c 8 3
- 3 c 9 NULL
- 7 d 10 NULL
- # ROWS BETWEEN y PRECEDING AND x PRECEDING, where x > y
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND 2 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- # ROWS BETWEEN y PRECEDING AND x PRECEDING, where x == y
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 0 PRECEDING AND 0 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 2
- 2 a 2 2
- 2 a 3 3
- 3 a 4 NULL
- 4 b 5 4
- 4 b 6 NULL
- 1 c 7 2
- 2 c 8 3
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 2 PRECEDING AND 2 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 2
- 2 a 2 3
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 3
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 10 PRECEDING AND 10 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- # ROWS BETWEEN UNBOUNDED PRECEDING AND x PRECEDING
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 1
- 2 a 2 2
- 2 a 3 2
- 3 a 4 3
- 4 b 5 4
- 4 b 6 4
- 1 c 7 1
- 2 c 8 2
- 3 c 9 3
- 7 d 10 7
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 2
- 2 a 2 2
- 2 a 3 3
- 3 a 4 NULL
- 4 b 5 4
- 4 b 6 NULL
- 1 c 7 2
- 2 c 8 3
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 2 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 2
- 2 a 2 3
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 3
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- query ITII
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 10 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- ----
- 1 a 1 NULL
- 2 a 2 NULL
- 2 a 3 NULL
- 3 a 4 NULL
- 4 b 5 NULL
- 4 b 6 NULL
- 1 c 7 NULL
- 2 c 8 NULL
- 3 c 9 NULL
- 7 d 10 NULL
- # Test near-overflow behavior on offsets
- # u64::MAX FOLLOWING
- query error db error: ERROR: Window frame offsets greater than 1000000 are currently not supported
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 18446744073709551615 PRECEDING AND 18446744073709551615 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- query error db error: ERROR: Window frame offsets greater than 1000000 are currently not supported
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 18446744073709551615 PRECEDING AND 18446744073709551614 PRECEDING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- # u64::MAX PRECEDING
- query error db error: ERROR: Window frame offsets greater than 1000000 are currently not supported
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 18446744073709551615 FOLLOWING AND 18446744073709551615 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- query error db error: ERROR: Window frame offsets greater than 1000000 are currently not supported
- 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))
- SELECT f1, f2, f3, last_value(f1) OVER (PARTITION BY f2 ORDER BY f1 DESC, f3 DESC ROWS BETWEEN 18446744073709551614 FOLLOWING AND 18446744073709551615 FOLLOWING)
- FROM t
- ORDER BY f2, f3, f1, last_value
- # Test window aggregations with and without fusion
- query III
- 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))
- SELECT
- sum(f1) OVER (ORDER BY f2) s,
- max(f1) OVER (ORDER BY f2) m,
- count(f1) OVER (ORDER BY f3) c
- FROM t
- ORDER BY s, m, c;
- ----
- 8 3 1
- 8 3 2
- 8 3 3
- 8 3 4
- 16 4 5
- 16 4 6
- 22 4 7
- 22 4 8
- 22 4 9
- 29 7 10
|