sql >> Database teknologi >  >> RDS >> Database

Rækkemønstergenkendelse i SQL

ISO/IEC 9075:2016 standarden, eller SQL:2016 kort fortalt, introducerer understøttelse af et dybtgående koncept kaldet Row Pattern Recognition (RPR) i SQL. Jeg postede et forslag til at forbedre SQL Server ved at tilføje understøttelse af RPR i T-SQL, men jeg var ret begrænset i den plads, jeg havde til at give feedback. Formålet med denne artikel er at give flere detaljer om forslaget, og forhåbentlig vil du blive overbevist om dets betydning og tilføje din stemme.

Baggrund

I lighed med at bruge regulære udtryk til at identificere mønstre i en streng, bruger du med RPR regulære udtryk til at identificere mønstre i en række rækker. For hvert mønstermatch kan du enten returnere en opsummeringsrække som i gruppering eller de detaljerede rækker med beregnede mål i forhold til efterfølgerne af kampen. RPR har ubegrænsede praktiske applikationer, herunder identifikation af mønstre i aktiemarkedsaktivitet (både gyldige mønstre med handelsværdi og potentielt ulovlige eller mistænkelige mønstre), håndtering af tidsserier, opdagelse af svindel, materialehåndtering, forsendelsesapplikationer, DNA-sekventering, huller og øer, top N pr. gruppe og mange andre.

For mig er RPR det næste skridt i udviklingen af ​​vinduesfunktioner, med et højere niveau af sofistikering og udvidet anvendelighed. Hvis du synes, at vinduesfunktioner er dybe og nyttige, vil RPR virkelig bage din nudler. I lighed med vinduesfunktioner understøtter RPR partitionering og bestilling. Du vil typisk lede efter mønstermatches inden for hver partition uafhængigt, baseret på den angivne rækkefølge. Også i lighed med vinduesfunktioner egner RPR sig til god optimering, med mulighed for at stole på indeksbestilling for at undgå at sortere dataene.

Du kan finde dækning af RPR, inklusive illustrerede eksempler, i en 90-siders teknisk rapport ISO/IEC TR 19075-5 (tilgængelig gratis).

Du kan også finde det som en del af dokumentet ISO/IEC 9075-2:2016, Informationsteknologi — Databasesprog — SQL — Del 2:Foundation (SQL/Foundation) (kan købes).

SQL:2016-standarden indeholder to primære RPR-relaterede funktioner:

  • Funktion R010, "Rækkemønstergenkendelse:FROM-sætning"
  • Funktion R020, "Rækkemønstergenkendelse:WINDOW-sætning"

Standarden nævner også funktion R030, "Rækkemønstergenkendelse:fuld aggregeret understøttelse", uden hvilken aggregerede funktioner ikke er tilladt at specificere DISTINCT eller .

Indtil videre er den eneste platform, jeg kender til den implementerede funktion R010, Oracle. Jeg kender ikke nogen platform, der implementerede R020 endnu.

Funktion R010, "Rækkemønstergenkendelse:FROM-sætning"

Funktion R010 definerer en klausul/tabeloperator kaldet MATCH_RECOGNIZE, som du bruger i FROM-sætningen. Inputtet er et tabel- eller tabeludtryk, og outputtet er en virtuel tabel. Konteksten ligner den for andre tabeloperatorer som JOIN, APPLY, PIVOT og UNPIVOT. Her er syntaksen for en forespørgsel, der bruger denne funktion:

VÆLG  FRA  MATCH_RECOGNIZE ( [ PARTITION BY  ] [ ORDER BY  ] [ MÅL  ] [  ::=EN RÆKKE PR. KAMP | ALLE RÆKKER PR. KAMP ] [ EFTER KAMP  MØNSTER (  ) [ SUBSET  ] DEFINER  ) SOM ;

Som et eksempel tilpasset fra den førnævnte tekniske rapport, antag, at du får en tabel dbo.Ticker, med kolonner symbol, handelsdato og pris. Brug følgende kode til at oprette tabellen, udfylde den med nogle eksempeldata, og forespørge den:

INDSTIL ANTAL TIL; BRUG tempdb; DROP TABEL HVIS FINDER dbo.Ticker; CREATE TABLE dbo.Ticker( symbol VARCHAR(10) NOT NULL, handelsdato IKKE NULL, pris NUMERIC(12, 2) IKKE NULL, BEGRÆNSNING PK_Ticker PRIMÆR NØGLE (symbol, handelsdato));GO INSERT INTO dbo.Ticker(symbol, handelsdato , pris) VÆRDI ('LAGER1', '20190212', 150,00), ('LAGER1', '20190213', 151,00), ('LAGER1', '20190214', 148,00), ('LAGER1', '025019', '02501', '02501', '02501', '02501' ), ('LAGER1', '20190218', 142,00), ('LAGER1', '20190219', 144,00), ('LAGER1', '20190220', 152,00), ('LAGER1', '201'009, 212009, 2019, 152.00), ('LAGER1', '20190222', 153,00), ('LAGER1', '20190225', 154,00), ('LAGER1', '20190226', 154,00), ('LAGER1', '200',02', '200', 02.'), STOCK1', '20190228', 153,00), ('STOCK1', '20190301', 145,00), ('STOCK1', '20190304', 140,00), ('STOCK1', '20190305'0,0305'0), (4205'0), , '20190306', 143,00), ('STOCK1', '20190307', 142,00), ('STOCK1', '20190308', 140,00), ('STOCK1', '20190311', '20190381', 0,' 13,'STOCKTO. 20190212', 330,00), ('LAGER2', '20190213', 329,00), ('LAGER2', '20190214', 329,00), ('LAGER2', '20190215', 326,00), ('LAGER2', '20190218', 325,00), ('LAGER2', '20190219', 326,00), ('20190218', 032,032,032) , ('LAGER2', '20190221', 326,00), ('LAGER2', '20190222', 320,00), ('LAGER2', '20190225', 317,00), ('LAGER2', '26'009, '26'009.), 'LAGER2', '20190227', 325,00), ('LAGER2', '20190228', 322,00), ('LAGER2', '20190301', 324,00), ('LAGER2', '20190228', 3204S, 201904S, 3204S, ', '20190305', 319,00), ('LAGER2', '20190306', 322,00), ('LAGER2', '20190307', 326,00), ('LAGER2', '20190308', 20190308', 32,' '20190311', 324,00); VÆLG symbol, handelsdato, pris FRA dbo.Ticker;

Denne kode genererer følgende output:

symbol handelsdato pris------ ---------- ------ LAGER1 2019-02-12 150,00LAGER1 2019-02-13 151,00LAGER1 2019-02-14 148,00LAGER1 2019-02-15 146.00Stock1 2019-02-18 142.00Stock1 2019-02-19 144.00Stock1 2019-02-20 152.00Stock1 2019-02-21 152.00Stock1 2019-02-22 153.00stock1 2019-02-25 154.00Stock1 2019 -02-26 154.00Stock1 2019-02-27 154.00Stock1 2019-02-28 153.00Stock1 2019-03-01 145.00Stock1 2019-03-04 140.00Stock1 2019-03-05 142.00Stock1 2019-03-06 143.00stock1 2019-03-03-05 142.00stock1 2019-03-06 143.00stock1 2019- 2019-03-03-05 142.00Stock1 2019-03-06 143.00.0012- 2019- 2019- 2019-03-03-03-05 142.00stock1 2019-03-06 143.00-1012- 2019- 2019-0- 2019-0-03-03-03-05-05 142,00-03-03-06 143,00- 2010- 2019- 2019- 2019- 2019-03-03 03-07 142.00Stock1 2019-03-08 140.00Stock1 2019-03-11 138.00Stock2 2019-02-12 330.00Stock2 2019-02-13 329.00Stock2 2019-02-14 329.00Stock2 2019-02-15 326.00stock2 2019-02202-02-14 329.00.00stock2 2019-02-15 326.00stock2 2019-0220202-02202-02-14 -18 325.00Stock2 2019-02-19 326.00Stock2 2019-02-20 328.00Stock2 2019-02-21 326.00Stock2 2019-02-22 320.00Stock2 2019-02-25 317.00Stock2 2019-02-26 319.00stock2 2019-02-25 27 325,00LAGER2 2019-02-28 322,00LAGER2 2019-03-01 324,00LAGER2 2019-03-04 321,00LAGER2 2019-03-05 319. 2019-03-06 322.00LAGER2 2019-03-07 326.00LAGER2 2019-03-08 326.00LAGER2 2019-03-11 324.0040 række(r) berørt.

Følgende forespørgsel identificerer mønstre, der repræsenterer V-former i aktiekursen (en periode med strengt faldende kurs efterfulgt af en periode med strengt stigende pris), ved hjælp af EN RÆKKE PR. SLAG som rækkemønsterrækker pr. match mulighed:

SELECT MR.symbol, MR.matchnum, MR.startdate, MR.startprice, MR.bottomdate, MR.bottomprice, MR.enddate, MR.endprice, MR.maxpriceFROM dbo.Ticker MATCH_RECOGNIZE ( PARTITION BY symbol ORDER BY handelsdato MÅLER MATCH_NUMBER() AS matchnum, A.tradedate AS startdato, A.price AS startprice, LAST(B.tradedate) AS bunddato, LAST(B.price) AS bundpris, SIDSTE(C.tradedate) AS slutdato, -- samme som SIDSTE(handelsdato) SIDSTE(C.pris) SOM slutpris, MAX(U.pris) SOM maks.pris -- samme som MAX(pris) EN RÆKKE PR. KAMP -- standard EFTER KAMP HORF OVER SIDSTE RÆKKE -- standard MØNSTER (A B+ C+ ) SUBSET U =(A, B, C) DEFINE -- A er som standard True, matcher enhver række, det samme som eksplicit at definere A AS 1 =1 B AS B.price  PREV(C.price) ) AS MR;

PARTITION BY-sætningen definerer, at du vil håndtere hvert aktiesymbol separat.

ORDER BY-klausulen definerer bestilling baseret på handelsdato.

DEFINE-sætningen definerer rækkemønstervariabler, der repræsenterer de forskellige underfølger af rækker i mønsteret. I ovenstående eksempel repræsenterer A enhver række som udgangspunkt, B repræsenterer en undersekvens af faldende priser (B.pris PREV( C.pris)).

PATTERN-sætningen bruger regulære udtryk til at identificere et mønster. I ovenstående forespørgsel er mønsteret (A B+ C+), hvilket betyder (enhver række, efterfulgt af en eller flere rækker med faldende priser, efterfulgt af en eller flere rækker med stigende priser). Følgende er regulære udtryksmønsterkvantifikatorer, som du kan bruge:

* — nul (0) eller flere kampe+ — en (1) eller flere kampe? — intet match eller et (1) match, valgfrit{ n } — nøjagtigt n matcher{ n, } — n eller flere match{ n, m } — mellem n og m (inklusive) match{ , m } — mellem nul (0) ) og m (inklusive) matcher{- Variable -}, f.eks. {- A -} — angiver, at matchende rækker skal udelukkes fra outputtet (kun nyttigt, hvis ALLE RÆKKER PER MATCH er angivet)|, f.eks. A | B — alternation(), f.eks. (A | B) — gruppering^, f.eks. ^A{1, 3} — start på en rækkemønsterpartition$, f.eks. A{1, 3}$ — slutningen af ​​et rækkemønster partition 

Som standard er kvantificatorerne grådige, men du kan definere dem til at være tilbageholdende.

SUBSET-sætningen giver dig mulighed for at definere en navngivet undergruppeliste af variabler.

MEASURES-klausulen definerer mål relateret til mønsteret. Du kan anvende beregninger på mønstervariabler og på delmængder. Funktionen MATCH_NUMBER() tildeler sekventielle heltal, der starter med 1 for matchene i partitionen. Du kan bruge operationer som FIRST, LAST, PREV og NEXT samt aggregerede beregninger.

Denne forespørgsel bruger EN RÆKKE PER SLAG som rækkemønsterrækker pr. match-indstilling. Dette betyder, at resultattabellen vil have én række pr. mønstermatch, svarende til resultatet af gruppering. Alternativet er ALLE RÆKKER PR. KAMP, hvor du vil have detaljerækkerne returneret pr. mønstermatch (eksempel følger snart).

Denne forespørgsel bruger AFTER MATCH SKIP FORTID SIDSTE RÆKKE som AFTER MATCH . Det betyder, at når et match er fundet, vil du gerne have, at det næste forsøg starter efter den sidste række i den aktuelle kamp. Der er andre alternativer som at lede efter det næste match i rækken efter den første række af det aktuelle match (SKIP TO NEXT ROW), eller at springe til en position i forhold til en rækkemønstervariabel.

Her er det forventede output af denne forespørgsel:

symbol matchnum startdato startpris bunddat bundpris slutpris maxpris------ -------- ---------- ---------- ---- ------ ----------- ---------- --------------------LAGER1 1 2019-02-13 151.00 2019-02-18 142.00 2019-02-20 152.00 152.00Stock1 2 2019-02-27 154.00 2019-03-04 140.00 2019-03-06 143.00 154.00Stock2 1 2019-02-14 329.00 2019-02-18 325.00 2019 2019 2019 2019 2019 -02-20 328.00 329.00Stock2 2 2019-02-21 326.00 2019-02-25 317.00 2019-02-27 325.00 326.00stock2 3 2019-03-01 324.00 2019-03-05 319.00 2019-03-07 326.00 326.00 før> 

Her er en let ændret version af forespørgslen ved hjælp af indstillingen ALLE RÆKKER PER MATCH:

SELECT MR.symbol, MR.tradedate, MR.price, MR.matchnum, MR.classy, ​​MR.startdate, MR.startprice, MR.bottomdate, MR.bottomprice, MR.enddate, MR.endprice, MR. maxpriceFROM dbo.Ticker MATCH_RECOGNIZE ( PARTITION BY symbol ORDER BY tradedate MÅLER MATCH_NUMBER() AS matchnum, CLASSIFIER() AS classy, ​​A.tradedate AS startdato, A.price AS startprice, LAST(B.tradedate) AS bottomdate, LAST(B. pris) SOM bundpris, SIDSTE(C.handelsdato) SOM slutdato, SIDSTE(C.pris) SOM slutpris, MAX(U.pris) SOM maxpris ALLE RÆKKER PR. KAMP EFTER KAMP OVERSPRING OVER SIDSTE RÆKKE MØNSTER (A B+ C+) SUBSET U =(A, B, C) DEFINE B AS B.price  PREV(C.price) ) AS MR;

Her er det forventede output af denne forespørgsel:

symbol handelsdato pris matchnum klassisk startdato startpris bunddato bundpris slutpris maxpris------ ---------- ------ -------- ----- ---------- ---------- ---------- -------------------------- -- ---------- --------LAGER1 2019-02-13 151,00 1 A 2019-02-13 151,00 NULL NULL NULL NULL 151,00LAGER1 2019-02-14 148,00 1 B 2019 02-13 151.00 2019-02-14 148.00 NULL NULL 151.00STOCK1 2019-02-15 146.00 1 B 2019-02-13 151.00 2019-02-15 146.00 NULL NUL 13 151.00 2019-02-18 142.00 NULL NULL 151.00STOCK1 2019-02-19 144.00 1 C 2019-02-13 151.00 2019-02-18 142.00 2019-02-19 144.00 151.00Stock1 2019-02-20 152.00 1 C 2019-019-02-19 144.00 151.00.00 02-13 151,00 2019-02-18 142,00 2019-02-20 152,00 152,00LAGER1 2019-02 -27 154.00 2 A 2019-02-27 154.00 NULL NULL NULL NULL 154.00STOCK1 2019-02-28 153.00 2 B 2019-02-27 154.00 2019-02-28 153.00 NULL NULL 154.00STOCK1 2019-03-01 145.00 2 B 2019 -02-27 154.00 2019-03-01 145.00 NULL NULL 154.00Stock1 2019-03-04 140.00 2 B 2019-02-27 154.00 2019-03-04 140.00 Null Null Null 154.00Stock1 2019-03-05 142.00 2 C 2019-02 -27 154.00 2019-03-04 140.00 2019-03-05 142.00 154.00Stock1 2019-03-06 143.00 2 C 2019-02-27 154.00 2019-03-04 140.00 2019-03-06 143.00 154.00Stock2 2019-02-03-04 140.00 2019-03-06 143.00 154.00Stock2 2019-02-14 329,00 1 A 2019-02-14 329,00 NULL NULL NULL 329,00LAGER2 2019-02-15 326,00 1 B 2019-02-14 329,00 2019 3020 2019 3020 2019 3020 2019 3020 2019 302 2019 2019 020 2019 2019-02-14 329.00 2019-02-18 325.00 NULL NULL 329.00Stock2 2019-02-19 326.00 1 C 2019-02-14 329.00 2019-02-18 325.00 2019-02-19 326.00 329.00stock2 2019-02-20 328.0000.00 2019-02-19 326.00 329.00stock2 2019-02-20 328.0000 1 C 2019-02-14 329,00 2019-02-18 325,00 2019-02-20 328,00 329,00Stock2 2019-02-21 326,00 2 A 2019-02-21 326,00 NUL 2019-02-21 326,00 2019-02-22 320,00 NULL NULL 326,00STOCK2 2019-02-25 317,00 2 B 2019-02-21 326,00 2019-02-25 317,00 NULL NULL 326,00stock2 2019-02-26 319.00 2 C 2019-17.00 NUL 02-21 326.00 2019-02-25 317.00 2019-02-26 319.00 326.00Stock2 2019-02-27 325.00 2 C 2019-02-21 326.00 2019-02-25 317.00 2019-02-27 325.00 326.00stock2 2019-03-25-25 317.00 2019-02-27 325.00 326.00stock2 2019-03-25-03-03- 01 324,00 3 A 2019-03-01 324,0 0 NULL NULL NULL NULL 324.00STOCK2 2019-03-04 321.00 3 B 2019-03-01 324.00 2019-03-04 321.00 NULL NULL 324.00STOCK2 2019-03-05 319.00 3 B 2019-03-01 324.00 2019-03-05 319.00 NULL NULL 324.00Stock2 2019-03-06 322.00 3 C 2019-03-01 324.00 2019-03-05 319.00 2019-03-06 322.00 324.00Stock2 2019-03-07 326.00 3 C 2019-03-01 324.00 2019-0333303-03-07 326.00 3 C 2019-03-01 324.00 2019-03333333333333333333333333333333333333333333333333333333 -05 319,00 2019-03-07 326,00 326,0027 række(r) påvirket.

Bemærk tilføjelsen af ​​takten classy baseret på funktionen CLASSIFIER. Denne funktion returnerer en streng, der repræsenterer den rækkemønstervariabel, som resultatrækken er knyttet til (i vores tilfælde A, B eller C).

Funktion R020, "Rækkemønstergenkendelse:WINDOW-sætning"

Funktion R020 bruger rækkemønstergenkendelse som en del af OVER-klausulen for vinduer (eller WINDOW-klausulen ved navngivning af en vinduesspecifikation) for yderligere at begrænse en vinduesramme. Ligesom vinduespartitionen begrænser rækkerne i inputtabeludtrykket (FROM… WHERE… GROUP BY… HAVING), og vinduesrammen yderligere begrænser vinduespartitionen, med funktion R020 begrænser du yderligere hele vinduesrammen til en reduceret vinduesramme lavet af rækkefølgen af ​​rækker, der udgør mønstermatchen. Her er en forespørgsel, der demonstrerer denne funktion med WINDOW-klausulen, ved at bruge en rækkemønster, der matcher specifikationerne, der svarer til den, der blev brugt i den første forespørgsel i denne artikel:

VÆLG T.symbol, T.handelsdato, T.pris, startdato OVER W, startpris OVER W, bunddato OVER W, bundpris OVER W, slutdato OVER W, slutpris OVER W, max.pris OVER WFRA dbo.Ticker TWINDOW W AS ( OPDELING EFTER symbol RÆKKER EFTER handelsdato. FORANSTALTNINGER A.handelsdato SOM startdato, A.pris SOM startdato, SIDSTE(B.handelsdato) SOM bunddato, SIDSTE(B.pris) SOM bundpris, SIDSTE(C.handelsdato) SOM slutdato, SIDSTE(C. pris) SOM slutpris, MAX(U.pris) SOM maks. pris RÆKKER MELLEM AKTUELLE RÆKKE OG UBEGRÆNSET FØLGENDE EFTER KAMP OVERFOR SIDSTE RÆKKE INITIAL -- mønsteret skal starte ved første række af fuld vinduesramme; alternativet er SØG MØNSTER (A B+ C+) UNDERSETT U =(A, B, C) DEFINE B AS B.price  PREV(C.price) );

Ved brug af rækkemønstergenkendelse med vinduesvisning skal hele vinduesrammen starte ved den aktuelle række. Bemærk brugen af ​​indstillingen INITIAL i denne forespørgsel. Denne mulighed betyder, at du kun får et match, hvis mønsteret starter med den aktuelle række. Alternativet er SEEK, hvilket betyder, at en søgning efter et match starter med den aktuelle række, men tillades til slutningen af ​​den fulde vinduesramme. Uanset hvad, hvis der findes et match, består den reducerede vinduesramme kun af mønstermatchrækkerne, ellers er den reducerede vinduesramme tom. Der søges kun én rækkemønstermatch pr. fuld vinduesramme.

Bemærk i forespørgslens SELECT-liste, at du kan returnere mål, der er defineret i MEASURES-sætningen, beregnet over W, som er den reducerede vinduesramme.

Husk resultatet af den første forespørgsel i denne artikel ved hjælp af rækkemønstergenkendelse i FROM-sætningen med muligheden ONE ROW PER MATCH:

symbol matchnum startdato startpris bunddat bundpris slutpris maxpris------ -------- ---------- ---------- ---- ------ ----------- ---------- --------------------LAGER1 1 2019-02-13 151.00 2019-02-18 142.00 2019-02-20 152.00 152.00Stock1 2 2019-02-27 154.00 2019-03-04 140.00 2019-03-06 143.00 154.00Stock2 1 2019-02-14 329.00 2019-02-18 325.00 2019 2019 2019 2019 2019 -02-20 328.00 329.00Stock2 2 2019-02-21 326.00 2019-02-25 317.00 2019-02-27 325.00 326.00stock2 3 2019-03-01 324.00 2019-03-05 319.00 2019-03-07 326.00 326.00 før> 

Her er det forventede output fra vores sidste forespørgsel ved hjælp af rækkemønstergenkendelse i WINDOW-sætningen:

symbol handelsdato pris startdato startpris bunddato bundpris slutpris slutpris maxpris------ ---------- ------ ---------- ----- ----- ---------- ----------- ------------------ ------ -STOCK1 2019-02-12 150.00 NULL NULL NULL NULL NULL NULL NULLSTOCK1 2019-02-13 151.00 2019-02-13 151.00 2019-02-18 142.00 2019-02-20 152.00 152.00stock1 2019-02-14 148.00 Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null null null null nullstock1 2019-02-15 146,00 NULL NULL NULL NULL NULL NULLSTOCK1 2019-02-18 142,00 NULL NULL NULL NULL NULL NULLSTOCK1 2019-02-19 144,00 NULL NUL NULL NULL NULL NULL NULL NULL NULLTOCK1 2019-02-21 152,00 NULL NULL NULL NULL N Ull null nullstock1 2019-02-22 153,00 NULL NULL NULL NULL NULL NULLSTOCK1 2019-02-25 154,00 NULL NULL NULL NULL NULL STOCK1 2019-02-02-26 154,00 NULL NULL NULL NULL NULL NUL 02-27 154.00 2019-03-04 140.00 2019-03-06 143.00 154.00Stock1 2019-02-28 153.00 NUL NULL NULL NULL NULL NULL NULL NULLSTOCK1 2019-03-05 142,00 NULL NULL NULL NULL NULL NULL NULLSTOCK1 2019-03-06 143,00 NULL NULL NULL NULL 1201 NUL 1201 NUL 1201 Ull null null nullstock1 2019-03-08 140,00 NULL NULL NULL NULL NULL NULLSTOCK1 2019-03-11 138,00 NULL NULL NULL NULL NUL Null null null null null nullstock2 2019-02-14 329,00 2019-02-14 329,00 2019-02-18 325,00 2019-02-20 328,00 329,00Stock2 2019-02-15 326,00 Null Null Null Null Null Null Nullstock2 2019-02-18 325,00 NULL NULL NULL NULL NULL NULL NULLSTOCK2 2019-02-19 326,00 NULL NULL NULL NULL NULL NULLSTOCK2 2019-02-20 328,00 NUL 019-02-25 317.00 2019-02-27 325.00 326.00Stock2 2019-02-22 320.00 NULL NULL NULL NUL NULL NULL NULLSTOCK2 2019-02-27 325.00 NULL NULL NULL NULL NULL NULLSTOCK2 2019-02-28 322.00 NULL NULL NULL NULL NULL NULLSTOCK2 2019-03-01 324.00 2019-03-01 324.00 2019-03-05 319.00 2019-0333303-03-01 324.00 2019-03-05 319.00 2019-033333303-03-01 324.00 2019-03-05 319.00 2019-03333333333-03-01 324,00 2019-03-05 319,00 2019-033333333303-03-01 324,00 2019-03-05 319.00 2019-03333333 -07 326.00 326.00Stock2 2019-03-04 321.00 NULL NULL NULL NULL NULL NULLSTOCK2 2019-03-05 319.00 NULL NULL NULL NULLSTOCK2 2019-03-06 322.00 NULL NULL NUL NUL NULL NULL NULL NULL NULL NULLSTOCK2 2019-03-08 326,00 NULL NULL NULL NULL NULL NULL NULLSTOCK2 2019-03-11 324,00 NULL NULL NULL NULL NULL 40 påvirket. 

Bemærk, at du får alle detaljerede rækker i outputtet, og hvor et mønstermatch starter, får du resultatet af de ønskede rækkemønstermål mod den reducerede vinduesramme.

Afgiv din stemme

Det er fuldstændig forstået, at det er en ret betydelig investering for Microsoft at tilføje en funktion til T-SQL – især en så væsentlig en. Men det, der er fantastisk ved funktioner, der føjes til T-SQL, er, at de stort set bliver der for evigt. Der er et stort fællesskab, der hungrer efter T-SQL-forbedringer som denne.

Hvis du føler, at rækkemønstergenkendelse er en vigtig tilføjelse til SQL Server, skal du sørge for at afgive din stemme. Det er også mere sandsynligt, at Microsoft prioriterer en foreslået funktion, hvis de kender til kunder og bruger cases, der kunne drage fordel af det, og at sådanne kunder i øjeblikket enten bruger andre produkter eller mere komplekse løsninger. Hvis du eller dine kunder ser RPR som gavnligt for dig og har brugssager, som du kan dele, skal du sørge for at tilføje kommentarer til feedbackelementet og lade Microsoft vide det.


  1. Mysql eller/og forrang?

  2. Leverer hurtigere innovation til MariaDBs fællesskab

  3. Oracle DBA Mentor

  4. Sådan returneres forespørgselsresultater som en kommasepareret liste i MySQL