Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
OracleSQL Pattern Matching
Made Easy
Oren Nakdimon
www.db-oriented.com
+972-54-4393763
@DBoriented
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
MATCH_RECOGNIZE
Added in Oracle 12cR1
Enhanced analysis of row sequences
For detecting matches to complex patterns
A significant boost to the analytical capabilities of SQL
Very powerful
With Great Power Comes
Complex Syntax
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Agenda
Start using Pattern Matching
Step by step
Not all the capabilities…
But all the essentials (and more)
Simple examples
Recommended resources
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
http://db-oriented.com
Who Am I?
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
1956 Switzerland Refrain Lys Assia French Switzerland1957 Netherlands Net als toen Corry Brokken 31 Dutch Germany1958 France Dors, mon amour André Claveau 27 French Netherlands1959 Netherlands Een beetje Teddy Scholten 21 Dutch France
1960 France Tom Pillibi Jacqueline Boyer 32 FrenchUnited Kingdom
1961 Luxembourg Nous les amoureux Jean-Claude Pascal 31 French France1962 France Un premier amour Isabelle Aubret 26 French Luxembourg
1963 Denmark Dansevise Grethe and Jørgen Ingmann 42 DanishUnited Kingdom
1964 Italy Non ho l'età Gigliola Cinquetti 49 Italian Denmark
1965 LuxembourgPoupée de cire, poupée de son France Gall 32 French Italy
1966 Austria Merci, Chérie Udo Jürgens 31 German Luxembourg
1967United Kingdom Puppet on a String Sandie Shaw 47 English Austria
1968 Spain La, la, la Massiel 29 SpanishUnited Kingdom
1969 Netherlands De troubadour Lenny Kuhr 18 Dutch Spain
1970 IrelandAll Kinds of Everything Dana 32 English Netherlands
1971 MonacoUn banc, un arbre, une rue Séverine 128 French Ireland
1972 Luxembourg Après toi Vicky Leandros 128 FrenchUnited Kingdom
1973 Luxembourg Tu te reconnaîtras Anne-Marie David 129 French LuxembourgUnited
YEAR WINNER SONG PERFORMER POINTS LANGUAGE HOST
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Find all the wins of Luxembourg
SELECT *FROM EUROVISION_WINNERSWHERE WINNER = 'Luxembourg';
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
YEAR WINNER SONG HOST1960 France Tom Pillibi United Kingdom1961 Luxembourg Nous les amoureux France1962 France Un premier amour Luxembourg1963 Denmark Dansevise United Kingdom1964 Italy Non ho l'età Denmark1965 Luxembourg Poupée de cire, poupée de son Italy1966 Austria Merci, Chérie Luxembourg1967 United Kingdom Puppet on a String Austria1968 Spain La, la, la United Kingdom1969 Netherlands De troubadour Spain1970 Ireland All Kinds of Everything Netherlands1971 Monaco Un banc, un arbre, une rue Ireland1972 Luxembourg Après toi United Kingdom1973 Luxembourg Tu te reconnaîtras Luxembourg1974 Sweden Waterloo United Kingdom1975 Netherlands Ding-a-dong Sweden1976 United Kingdom Save Your Kisses for Me Netherlands1977 France L'oiseau et l'enfant United Kingdom1978 Israel A-Ba-Ni-Bi France1979 Israel Hallelujah Israel
Find all the wins of Luxembourg
Pattern Variable
1
2
3
4
LUX
SELECT YEAR, WINNER, SONG, HOST FROM EUROVISION_WINNERSMATCH_RECOGNIZE (ALL ROWS PER MATCHPATTERN (LUX)DEFINE LUX AS WINNER = 'Luxembourg'
)
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
YEAR WINNER SONG HOST1960 France Tom Pillibi United Kingdom1961 Luxembourg Nous les amoureux France1962 France Un premier amour Luxembourg1963 Denmark Dansevise United Kingdom1964 Italy Non ho l'età Denmark1965 Luxembourg Poupée de cire, poupée de son Italy1966 Austria Merci, Chérie Luxembourg1967 United Kingdom Puppet on a String Austria1968 Spain La, la, la United Kingdom1969 Netherlands De troubadour Spain1970 Ireland All Kinds of Everything Netherlands1971 Monaco Un banc, un arbre, une rue Ireland1972 Luxembourg Après toi United Kingdom1973 Luxembourg Tu te reconnaîtras Luxembourg1974 Sweden Waterloo United Kingdom1975 Netherlands Ding-a-dong Sweden1976 United Kingdom Save Your Kisses for Me Netherlands1977 France L'oiseau et l'enfant United Kingdom1978 Israel A-Ba-Ni-Bi France1979 Israel Hallelujah Israel
Find 2 successive wins of Luxembourg
SELECT *FROM EUROVISION_WINNERSWHERE WINNER = 'Luxembourg';
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
YEAR WINNER SONG HOST1960 France Tom Pillibi United Kingdom1961 Luxembourg Nous les amoureux France1962 France Un premier amour Luxembourg1963 Denmark Dansevise United Kingdom1964 Italy Non ho l'età Denmark1965 Luxembourg Poupée de cire, poupée de son Italy1966 Austria Merci, Chérie Luxembourg1967 United Kingdom Puppet on a String Austria1968 Spain La, la, la United Kingdom1969 Netherlands De troubadour Spain1970 Ireland All Kinds of Everything Netherlands1971 Monaco Un banc, un arbre, une rue Ireland1972 Luxembourg Après toi United Kingdom1973 Luxembourg Tu te reconnaîtras Luxembourg1974 Sweden Waterloo United Kingdom1975 Netherlands Ding-a-dong Sweden1976 United Kingdom Save Your Kisses for Me Netherlands1977 France L'oiseau et l'enfant United Kingdom1978 Israel A-Ba-Ni-Bi France1979 Israel Hallelujah Israel
Find 2 successive wins of Luxembourg
Pattern Variable
SELECT YEAR, WINNER, SONG, HOST FROM EUROVISION_WINNERSMATCH_RECOGNIZE (ORDER BY YEARALL ROWS PER MATCHPATTERN (LUX LUX)DEFINE LUX AS WINNER = 'Luxembourg'
)
1
LUX
order by
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Variables Pattern
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
YEAR WINNER SONG HOST1960 France Tom Pillibi United Kingdom1961 Luxembourg Nous les amoureux France1962 France Un premier amour Luxembourg1963 Denmark Dansevise United Kingdom1964 Italy Non ho l'età Denmark1965 Luxembourg Poupée de cire, poupée de son Italy1966 Austria Merci, Chérie Luxembourg1967 United Kingdom Puppet on a String Austria1968 Spain La, la, la United Kingdom1969 Netherlands De troubadour Spain1970 Ireland All Kinds of Everything Netherlands1971 Monaco Un banc, un arbre, une rue Ireland1972 Luxembourg Après toi United Kingdom1973 Luxembourg Tu te reconnaîtras Luxembourg1974 Sweden Waterloo United Kingdom1975 Netherlands Ding-a-dong Sweden1976 United Kingdom Save Your Kisses for Me Netherlands1977 France L'oiseau et l'enfant United Kingdom1978 Israel A-Ba-Ni-Bi France1979 Israel Hallelujah Israel
Find 2 successive wins of Luxembourg
Pattern Variable
SELECT YEAR, WINNER, SONG, HOST FROM EUROVISION_WINNERSMATCH_RECOGNIZE (ORDER BY YEARALL ROWS PER MATCHPATTERN (LUX LUX)DEFINE LUX AS WINNER = 'Luxembourg'
)
1
LUX
order by
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Find 2 successive wins of Luxembourg
SELECT YEAR, WINNER, SONG, HOST FROM EUROVISION_WINNERSMATCH_RECOGNIZE (ORDER BY YEARALL ROWS PER MATCHPATTERN (LUX LUX)DEFINE LUX AS WINNER = 'Luxembourg'
)
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Find 2 successive wins of Luxembourg
SELECT YEAR, WINNER, SONG, HOST FROM EUROVISION_WINNERSMATCH_RECOGNIZE (ORDER BY YEARALL ROWS PER MATCHPATTERN (LUX{2})DEFINE LUX AS WINNER = 'Luxembourg'
)
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
PATTERN Quantifiers
Pattern Number of consecutive occurrences
X 1
X{n} n
X{n,} n or more
X* 0 or more
X{n,m} between n and m
X{,m} between 0 and m
X? 0 or 1
X+ 1 or more
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
YEAR WINNER SONG HOST1960 France Tom Pillibi United Kingdom1961 Luxembourg Nous les amoureux France1962 France Un premier amour Luxembourg1963 Denmark Dansevise United Kingdom1964 Italy Non ho l'età Denmark1965 Luxembourg Poupée de cire, poupée de son Italy1966 Austria Merci, Chérie Luxembourg1967 United Kingdom Puppet on a String Austria1968 Spain La, la, la United Kingdom1969 Netherlands De troubadour Spain1970 Ireland All Kinds of Everything Netherlands1971 Monaco Un banc, un arbre, une rue Ireland1972 Luxembourg Après toi United Kingdom1973 Luxembourg Tu te reconnaîtras Luxembourg1974 Sweden Waterloo United Kingdom1975 Netherlands Ding-a-dong Sweden1976 United Kingdom Save Your Kisses for Me Netherlands1977 France L'oiseau et l'enfant United Kingdom1978 Israel A-Ba-Ni-Bi France1979 Israel Hallelujah Israel
Find one or more successive wins of Luxembourg
Pattern Variable
SELECT YEAR, WINNER, SONG, HOST FROM EUROVISION_WINNERSMATCH_RECOGNIZE (ORDER BY YEARALL ROWS PER MATCHPATTERN (LUX+)DEFINE LUX AS WINNER = 'Luxembourg'
)
1
2
3
LUX
order by
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
SELECT YEAR, WINNER, SONG, HOST FROM EUROVISION_WINNERSMATCH_RECOGNIZE (ORDER BY YEARALL ROWS PER MATCHPATTERN (LUX)DEFINE LUX AS WINNER = 'Luxembourg'
)
SELECT YEAR, WINNER, SONG, HOST FROM EUROVISION_WINNERSMATCH_RECOGNIZE (ORDER BY YEARALL ROWS PER MATCHPATTERN (LUX+)DEFINE LUX AS WINNER = 'Luxembourg'
)
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
A match isa consecutive sequence
of(zero, one, or more)
records,that matches a specific pattern
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
SELECT YEAR, WINNER, SONG, HOST FROM EUROVISION_WINNERSMATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() AS MATCH#
ALL ROWS PER MATCHPATTERN (LUX)DEFINE LUX AS WINNER = 'Luxembourg'
)
SELECT YEAR, WINNER, SONG, HOST FROM EUROVISION_WINNERSMATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() AS MATCH#
ALL ROWS PER MATCHPATTERN (LUX+)DEFINE LUX AS WINNER = 'Luxembourg'
)
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
SELECT MATCH#, YEAR, WINNER, SONG, HOST FROM EUROVISION_WINNERSMATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() AS MATCH#
ALL ROWS PER MATCHPATTERN (LUX)DEFINE LUX AS WINNER = 'Luxembourg'
)
SELECT MATCH#, YEAR, WINNER, SONG, HOST FROM EUROVISION_WINNERSMATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() AS MATCH#
ALL ROWS PER MATCHPATTERN (LUX+)DEFINE LUX AS WINNER = 'Luxembourg'
)
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
MATCH_RECOGNIZE
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Input and Output
SELECT * FROM (SELECT YEAR, WINNER, SONG, PERFORMER, HOSTFROM EUROVISION_WINNERSWHERE YEAR BETWEEN 1990 AND 2000)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() AS MATCH#
ALL ROWS PER MATCHPATTERN (I L UK?)DEFINE I AS WINNER LIKE 'I%',
LN AS LENGTH(SONG)>=18,UK AS HOST='United Kingdom'
);
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Input and Output
SELECT * FROM (SELECT YEAR, WINNER, SONG, PERFORMER, HOSTFROM EUROVISION_WINNERSWHERE YEAR BETWEEN 1990 AND 2000)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() AS MATCH#
ALL ROWS PER MATCHPATTERN (I L UK?)DEFINE I AS WINNER LIKE 'I%',
LN AS LENGTH(SONG)>=18,UK AS HOST='United Kingdom'
);
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
SELECT * FROM (SELECT YEAR, WINNER, SONG, HOSTFROM EUROVISION_WINNERSWHERE YEAR BETWEEN 1990 AND 2000)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() AS MATCH#
ALL ROWS PER MATCHPATTERN (I L UK?)DEFINE I AS WINNER LIKE 'I%',
LN AS LENGTH(SONG)>=18,UK AS HOST='United Kingdom'
);
Input and Output
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
SELECT * FROM (SELECT YEAR, WINNER, SONG, HOSTFROM EUROVISION_WINNERSWHERE YEAR BETWEEN 1990 AND 2000)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() AS MATCH#
ALL ROWS PER MATCHPATTERN (I L UK?)DEFINE I AS WINNER LIKE 'I%',
LN AS LENGTH(SONG)>=18,UK AS HOST='United Kingdom'
);
Input and Output
YEAR WINNER SONG HOST1990 Italy Insieme: 1992 Yugoslavia1991 Sweden Fångad av en stormvind Italy1992 Ireland Why Me? Sweden1993 Ireland In Your Eyes Ireland1994 Ireland Rock 'n' Roll Kids Ireland1995 Norway Nocturne Ireland1996 Ireland The Voice Norway1997 United Kingdom Love Shine a Light Ireland1998 Israel Diva United Kingdom1999 Sweden Take Me to Your Heaven Israel2000 Denmark Fly on the Wings of Love Sweden
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Multiple Pattern Variables
YEAR WINNER SONG HOST1990 Italy Insieme: 1992 Yugoslavia1991 Sweden Fångad av en stormvind Italy1992 Ireland Why Me? Sweden1993 Ireland In Your Eyes Ireland1994 Ireland Rock 'n' Roll Kids Ireland1995 Norway Nocturne Ireland1996 Ireland The Voice Norway1997 United Kingdom Love Shine a Light Ireland1998 Israel Diva United Kingdom1999 Sweden Take Me to Your Heaven Israel2000 Denmark Fly on the Wings of Love Sweden
SELECT * FROM (SELECT YEAR, WINNER, SONG, HOSTFROM EUROVISION_WINNERSWHERE YEAR BETWEEN 1990 AND 2000)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() AS MATCH#
ALL ROWS PER MATCHPATTERN (I LN UK?)DEFINE I AS WINNER LIKE 'I%',
LN AS LENGTH(SONG)>=18,UK AS HOST='United Kingdom'
);
order by
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
SELECT * FROM (SELECT YEAR, WINNER, SONG, PERFORMER, HOSTFROM EUROVISION_WINNERSWHERE YEAR BETWEEN 1990 AND 2000)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() AS MATCH#
ALL ROWS PER MATCHPATTERN (I LN UK?)DEFINE I AS WINNER LIKE 'I%',
LN AS LENGTH(SONG)>=18,UK AS HOST='United Kingdom'
);
Multiple Pattern Variables
YEAR WINNER SONG HOST1990 Italy Insieme: 1992 Yugoslavia1991 Sweden Fångad av en stormvind Italy1992 Ireland Why Me? Sweden1993 Ireland In Your Eyes Ireland1994 Ireland Rock 'n' Roll Kids Ireland1995 Norway Nocturne Ireland1996 Ireland The Voice Norway1997 United Kingdom Love Shine a Light Ireland1998 Israel Diva United Kingdom1999 Sweden Take Me to Your Heaven Israel2000 Denmark Fly on the Wings of Love Sweden
order by
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
SELECT * FROM (SELECT YEAR, WINNER, SONG, PERFORMER, HOSTFROM EUROVISION_WINNERSWHERE YEAR BETWEEN 1990 AND 2000)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() AS MATCH#
ALL ROWS PER MATCHPATTERN (I LN UK?)DEFINE I AS WINNER LIKE 'I%',
LN AS LENGTH(SONG)>=18,UK AS HOST='United Kingdom'
);
Multiple Pattern Variables
YEAR WINNER SONG HOST1990 Italy Insieme: 1992 Yugoslavia1991 Sweden Fångad av en stormvind Italy1992 Ireland Why Me? Sweden1993 Ireland In Your Eyes Ireland1994 Ireland Rock 'n' Roll Kids Ireland1995 Norway Nocturne Ireland1996 Ireland The Voice Norway1997 United Kingdom Love Shine a Light Ireland1998 Israel Diva United Kingdom1999 Sweden Take Me to Your Heaven Israel2000 Denmark Fly on the Wings of Love Sweden
I?
???
?
?
Pattern Variablesorder by
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
SELECT * FROM (SELECT YEAR, WINNER, SONG, PERFORMER, HOSTFROM EUROVISION_WINNERSWHERE YEAR BETWEEN 1990 AND 2000)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() AS MATCH#
ALL ROWS PER MATCHPATTERN (I LN UK?)DEFINE I AS WINNER LIKE 'I%',
LN AS LENGTH(SONG)>=18,UK AS HOST='United Kingdom'
);
Multiple Pattern Variables
YEAR WINNER SONG HOST1990 Italy Insieme: 1992 Yugoslavia1991 Sweden Fångad av en stormvind Italy1992 Ireland Why Me? Sweden1993 Ireland In Your Eyes Ireland1994 Ireland Rock 'n' Roll Kids Ireland1995 Norway Nocturne Ireland1996 Ireland The Voice Norway1997 United Kingdom Love Shine a Light Ireland1998 Israel Diva United Kingdom1999 Sweden Take Me to Your Heaven Israel2000 Denmark Fly on the Wings of Love Sweden
I?
???
?
?
LN
?
?
?
??
Pattern Variablesorder by
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
SELECT * FROM (SELECT YEAR, WINNER, SONG, PERFORMER, HOSTFROM EUROVISION_WINNERSWHERE YEAR BETWEEN 1990 AND 2000)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() AS MATCH#
ALL ROWS PER MATCHPATTERN (I LN UK?)DEFINE I AS WINNER LIKE 'I%',
LN AS LENGTH(SONG)>=18,UK AS HOST='United Kingdom'
);
Multiple Pattern Variables
YEAR WINNER SONG HOST1990 Italy Insieme: 1992 Yugoslavia1991 Sweden Fångad av en stormvind Italy1992 Ireland Why Me? Sweden1993 Ireland In Your Eyes Ireland1994 Ireland Rock 'n' Roll Kids Ireland1995 Norway Nocturne Ireland1996 Ireland The Voice Norway1997 United Kingdom Love Shine a Light Ireland1998 Israel Diva United Kingdom1999 Sweden Take Me to Your Heaven Israel2000 Denmark Fly on the Wings of Love Sweden
I?
???
?
?
LN
?
?
?
??
UK
?
Pattern Variablesorder by
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
UKLNI
SELECT * FROM (SELECT YEAR, WINNER, SONG, PERFORMER, HOSTFROM EUROVISION_WINNERSWHERE YEAR BETWEEN 1990 AND 2000)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() AS MATCH#
ALL ROWS PER MATCHPATTERN (I LN UK?)DEFINE I AS WINNER LIKE 'I%',
LN AS LENGTH(SONG)>=18,UK AS HOST='United Kingdom'
);
Multiple Pattern Variables
1
2
3
YEAR WINNER SONG HOST1990 Italy Insieme: 1992 Yugoslavia1991 Sweden Fångad av en stormvind Italy1992 Ireland Why Me? Sweden1993 Ireland In Your Eyes Ireland1994 Ireland Rock 'n' Roll Kids Ireland1995 Norway Nocturne Ireland1996 Ireland The Voice Norway1997 United Kingdom Love Shine a Light Ireland1998 Israel Diva United Kingdom1999 Sweden Take Me to Your Heaven Israel2000 Denmark Fly on the Wings of Love Sweden
Pattern Variablesorder by
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
UKLNI
Multiple Pattern Variables
1
2
3
YEAR WINNER SONG HOST1990 Italy Insieme: 1992 Yugoslavia1991 Sweden Fångad av en stormvind Italy1992 Ireland Why Me? Sweden1993 Ireland In Your Eyes Ireland1994 Ireland Rock 'n' Roll Kids Ireland1995 Norway Nocturne Ireland1996 Ireland The Voice Norway1997 United Kingdom Love Shine a Light Ireland1998 Israel Diva United Kingdom1999 Sweden Take Me to Your Heaven Israel2000 Denmark Fly on the Wings of Love Sweden
Pattern Variablesorder by
SELECT * FROM (SELECT YEAR, WINNER, SONG, HOSTFROM EUROVISION_WINNERSWHERE YEAR BETWEEN 1990 AND 2000)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() AS MATCH#
ALL ROWS PER MATCHPATTERN (I LN UK?)DEFINE I AS WINNER LIKE 'I%',
LN AS LENGTH(SONG)>=18,UK AS HOST='United Kingdom'
);
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Find two or more successive wins of the same country
YEAR WINNER SONG HOST1977 France L'oiseau et l'enfant United Kingdom1978 Israel A-Ba-Ni-Bi France1979 Israel Hallelujah Israel1980 Ireland What's Another Year Netherlands1981 United Kingdom Making Your Mind Up Ireland1982 Germany Ein bißchen Frieden United Kingdom1983 Luxembourg Si la vie est cadeau Germany1984 Sweden Diggi-Loo Diggi-Ley Luxembourg1985 Norway La det swinge Sweden1986 Belgium J'aime la vie Norway1987 Ireland Hold Me Now Belgium1988 Switzerland Ne partez pas sans moi Ireland1989 Yugoslavia Rock Me Switzerland1990 Italy Insieme: 1992 Yugoslavia1991 Sweden Fångad av en stormvind Italy1992 Ireland Why Me? Sweden1993 Ireland In Your Eyes Ireland1994 Ireland Rock 'n' Roll Kids Ireland1995 Norway Nocturne Ireland
X SAME
SELECT MATCH#, YEAR, WINNER, SONG, HOSTFROM EUROVISION_WINNERSMATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() AS MATCH#
ALL ROWS PER MATCHPATTERN (X SAME+)DEFINE SAME AS WINNER = PREV(WINNER)
);
Implicit Pattern Variable
PREV
NEXT
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Find returning winners after a breakYEAR WINNER SONG POINTS1971 Monaco Un banc, un arbre, une rue 1281972 Luxembourg Après toi 1281973 Luxembourg Tu te reconnaîtras 1291974 Sweden Waterloo 241975 Netherlands Ding-a-dong 1521976 United Kingdom Save Your Kisses for Me 1641977 France L'oiseau et l'enfant 1361978 Israel A-Ba-Ni-Bi 1571979 Israel Hallelujah 1251980 Ireland What's Another Year 1431981 United Kingdom Making Your Mind Up 1361982 Germany Ein bißchen Frieden 1611983 Luxembourg Si la vie est cadeau 1421984 Sweden Diggi-Loo Diggi-Ley 1451985 Norway La det swinge 1231986 Belgium J'aime la vie 1761987 Ireland Hold Me Now 1721988 Switzerland Ne partez pas sans moi 1371989 Yugoslavia Rock Me 1371990 Italy Insieme: 1992 1491991 Sweden Fångad av en stormvind 146
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Find returning winners after a breakYEAR WINNER SONG POINTS1971 Monaco Un banc, un arbre, une rue 1281972 Luxembourg Après toi 1281973 Luxembourg Tu te reconnaîtras 1291974 Sweden Waterloo 241975 Netherlands Ding-a-dong 1521976 United Kingdom Save Your Kisses for Me 1641977 France L'oiseau et l'enfant 1361978 Israel A-Ba-Ni-Bi 1571979 Israel Hallelujah 1251980 Ireland What's Another Year 1431981 United Kingdom Making Your Mind Up 1361982 Germany Ein bißchen Frieden 1611983 Luxembourg Si la vie est cadeau 1421984 Sweden Diggi-Loo Diggi-Ley 1451985 Norway La det swinge 1231986 Belgium J'aime la vie 1761987 Ireland Hold Me Now 1721988 Switzerland Ne partez pas sans moi 1371989 Yugoslavia Rock Me 1371990 Italy Insieme: 1992 1491991 Sweden Fångad av en stormvind 146
SELECT MATCH#, YEAR, WINNER, SONG, POINTS, CLSFROM (SELECT * FROM EUROVISION_WINNERS
WHERE YEAR BETWEEN 1971 AND 1991)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,CLASSIFIER() CLS
ALL ROWS PER MATCHAFTER MATCH SKIP PAST LAST ROWPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY YEAR;
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Find returning winners after a breakYEAR WINNER SONG POINTS1971 Monaco Un banc, un arbre, une rue 1281972 Luxembourg Après toi 1281973 Luxembourg Tu te reconnaîtras 1291974 Sweden Waterloo 241975 Netherlands Ding-a-dong 1521976 United Kingdom Save Your Kisses for Me 1641977 France L'oiseau et l'enfant 1361978 Israel A-Ba-Ni-Bi 1571979 Israel Hallelujah 1251980 Ireland What's Another Year 1431981 United Kingdom Making Your Mind Up 1361982 Germany Ein bißchen Frieden 1611983 Luxembourg Si la vie est cadeau 1421984 Sweden Diggi-Loo Diggi-Ley 1451985 Norway La det swinge 1231986 Belgium J'aime la vie 1761987 Ireland Hold Me Now 1721988 Switzerland Ne partez pas sans moi 1371989 Yugoslavia Rock Me 1371990 Italy Insieme: 1992 1491991 Sweden Fångad av en stormvind 146
SELECT MATCH#, YEAR, WINNER, SONG, POINTS, CLSFROM (SELECT * FROM EUROVISION_WINNERS
WHERE YEAR BETWEEN 1971 AND 1991)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,CLASSIFIER() CLS
ALL ROWS PER MATCHAFTER MATCH SKIP PAST LAST ROWPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY YEAR;
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Find returning winners after a breakYEAR WINNER SONG POINTS1971 Monaco Un banc, un arbre, une rue 1281972 Luxembourg Après toi 1281973 Luxembourg Tu te reconnaîtras 1291974 Sweden Waterloo 241975 Netherlands Ding-a-dong 1521976 United Kingdom Save Your Kisses for Me 1641977 France L'oiseau et l'enfant 1361978 Israel A-Ba-Ni-Bi 1571979 Israel Hallelujah 1251980 Ireland What's Another Year 1431981 United Kingdom Making Your Mind Up 1361982 Germany Ein bißchen Frieden 1611983 Luxembourg Si la vie est cadeau 1421984 Sweden Diggi-Loo Diggi-Ley 1451985 Norway La det swinge 1231986 Belgium J'aime la vie 1761987 Ireland Hold Me Now 1721988 Switzerland Ne partez pas sans moi 1371989 Yugoslavia Rock Me 1371990 Italy Insieme: 1992 1491991 Sweden Fångad av en stormvind 146
SELECT MATCH#, YEAR, WINNER, SONG, POINTS, CLSFROM (SELECT * FROM EUROVISION_WINNERS
WHERE YEAR BETWEEN 1971 AND 1991)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,CLASSIFIER() CLS
ALL ROWS PER MATCHAFTER MATCH SKIP PAST LAST ROWPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY YEAR;
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Find returning winners after a breakYEAR WINNER SONG POINTS1971 Monaco Un banc, un arbre, une rue 1281972 Luxembourg Après toi 1281973 Luxembourg Tu te reconnaîtras 1291974 Sweden Waterloo 241975 Netherlands Ding-a-dong 1521976 United Kingdom Save Your Kisses for Me 1641977 France L'oiseau et l'enfant 1361978 Israel A-Ba-Ni-Bi 1571979 Israel Hallelujah 1251980 Ireland What's Another Year 1431981 United Kingdom Making Your Mind Up 1361982 Germany Ein bißchen Frieden 1611983 Luxembourg Si la vie est cadeau 1421984 Sweden Diggi-Loo Diggi-Ley 1451985 Norway La det swinge 1231986 Belgium J'aime la vie 1761987 Ireland Hold Me Now 1721988 Switzerland Ne partez pas sans moi 1371989 Yugoslavia Rock Me 1371990 Italy Insieme: 1992 1491991 Sweden Fångad av en stormvind 146
SELECT MATCH#, YEAR, WINNER, SONG, POINTS, CLSFROM (SELECT * FROM EUROVISION_WINNERS
WHERE YEAR BETWEEN 1971 AND 1991)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,CLASSIFIER() CLS
ALL ROWS PER MATCHAFTER MATCH SKIP PAST LAST ROWPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY YEAR;
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Find returning winners after a breakYEAR WINNER SONG POINTS1971 Monaco Un banc, un arbre, une rue 1281972 Luxembourg Après toi 1281973 Luxembourg Tu te reconnaîtras 1291974 Sweden Waterloo 241975 Netherlands Ding-a-dong 1521976 United Kingdom Save Your Kisses for Me 1641977 France L'oiseau et l'enfant 1361978 Israel A-Ba-Ni-Bi 1571979 Israel Hallelujah 1251980 Ireland What's Another Year 1431981 United Kingdom Making Your Mind Up 1361982 Germany Ein bißchen Frieden 1611983 Luxembourg Si la vie est cadeau 1421984 Sweden Diggi-Loo Diggi-Ley 1451985 Norway La det swinge 1231986 Belgium J'aime la vie 1761987 Ireland Hold Me Now 1721988 Switzerland Ne partez pas sans moi 1371989 Yugoslavia Rock Me 1371990 Italy Insieme: 1992 1491991 Sweden Fångad av en stormvind 146
SELECT MATCH#, YEAR, WINNER, SONG, POINTS, CLSFROM (SELECT * FROM EUROVISION_WINNERS
WHERE YEAR BETWEEN 1971 AND 1991)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,CLASSIFIER() CLS
ALL ROWS PER MATCHAFTER MATCH SKIP PAST LAST ROWPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY YEAR;
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Find returning winners after a breakYEAR WINNER SONG POINTS1971 Monaco Un banc, un arbre, une rue 1281972 Luxembourg Après toi 1281973 Luxembourg Tu te reconnaîtras 1291974 Sweden Waterloo 241975 Netherlands Ding-a-dong 1521976 United Kingdom Save Your Kisses for Me 1641977 France L'oiseau et l'enfant 1361978 Israel A-Ba-Ni-Bi 1571979 Israel Hallelujah 1251980 Ireland What's Another Year 1431981 United Kingdom Making Your Mind Up 1361982 Germany Ein bißchen Frieden 1611983 Luxembourg Si la vie est cadeau 1421984 Sweden Diggi-Loo Diggi-Ley 1451985 Norway La det swinge 1231986 Belgium J'aime la vie 1761987 Ireland Hold Me Now 1721988 Switzerland Ne partez pas sans moi 1371989 Yugoslavia Rock Me 1371990 Italy Insieme: 1992 1491991 Sweden Fångad av en stormvind 146
SELECT MATCH#, YEAR, WINNER, SONG, POINTS, CLSFROM (SELECT * FROM EUROVISION_WINNERS
WHERE YEAR BETWEEN 1971 AND 1991)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,CLASSIFIER() CLS
ALL ROWS PER MATCHAFTER MATCH SKIP PAST LAST ROWPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY YEAR;
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Find returning winners after a breakYEAR WINNER SONG POINTS1971 Monaco Un banc, un arbre, une rue 1281972 Luxembourg Après toi 1281973 Luxembourg Tu te reconnaîtras 1291974 Sweden Waterloo 241975 Netherlands Ding-a-dong 1521976 United Kingdom Save Your Kisses for Me 1641977 France L'oiseau et l'enfant 1361978 Israel A-Ba-Ni-Bi 1571979 Israel Hallelujah 1251980 Ireland What's Another Year 1431981 United Kingdom Making Your Mind Up 1361982 Germany Ein bißchen Frieden 1611983 Luxembourg Si la vie est cadeau 1421984 Sweden Diggi-Loo Diggi-Ley 1451985 Norway La det swinge 1231986 Belgium J'aime la vie 1761987 Ireland Hold Me Now 1721988 Switzerland Ne partez pas sans moi 1371989 Yugoslavia Rock Me 1371990 Italy Insieme: 1992 1491991 Sweden Fångad av en stormvind 146
SELECT MATCH#, YEAR, WINNER, SONG, POINTS, CLSFROM (SELECT * FROM EUROVISION_WINNERS
WHERE YEAR BETWEEN 1971 AND 1991)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,CLASSIFIER() CLS
ALL ROWS PER MATCHAFTER MATCH SKIP PAST LAST ROWPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY YEAR;
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Find returning winners after a break
SELECT MATCH#, YEAR, WINNER, SONG, POINTS, CLSFROM (SELECT * FROM EUROVISION_WINNERS
WHERE YEAR BETWEEN 1971 AND 1991)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,CLASSIFIER() CLS
ALL ROWS PER MATCHAFTER MATCH SKIP PAST LAST ROWPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY YEAR;
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
SELECT MATCH#, YEAR, WINNER, SONG, POINTS, CLSFROM (SELECT * FROM EUROVISION_WINNERS
WHERE YEAR BETWEEN 1971 AND 1991)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,CLASSIFIER() CLS
ALL ROWS PER MATCHAFTER MATCH SKIP PAST LAST ROWPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY YEAR;
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
SELECT MATCH#, YEAR, WINNER, SONG, POINTS, VARFROM (SELECT * FROM EUROVISION_WINNERS
WHERE YEAR BETWEEN 1971 AND 1991)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,CLASSIFIER() VAR
ALL ROWS PER MATCHAFTER MATCH SKIP PAST LAST ROWPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY YEAR;
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
SELECT MATCH#, YEAR, WINNER, SONG, POINTS, VARFROM (SELECT * FROM EUROVISION_WINNERS
WHERE YEAR BETWEEN 1971 AND 1991)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,CLASSIFIER() VAR
ALL ROWS PER MATCH WITH UNMATCHED ROWSAFTER MATCH SKIP PAST LAST ROWPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY YEAR;
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
SELECT MATCH#, YEAR, WINNER, SONG, POINTS, VARFROM (SELECT * FROM EUROVISION_WINNERS
WHERE YEAR BETWEEN 1971 AND 1991)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,CLASSIFIER() VAR
ALL ROWS PER MATCH WITH UNMATCHED ROWSAFTER MATCH SKIP PAST LAST ROWPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY YEAR;
PAST LAST ROW (the default)TO NEXT ROWTO FIRST varTO [LAST] var
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
SELECT MATCH#, YEAR, WINNER, SONG, POINTS, VARFROM (SELECT * FROM EUROVISION_WINNERS
WHERE YEAR BETWEEN 1971 AND 1991)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,CLASSIFIER() VAR
ALL ROWS PER MATCH WITH UNMATCHED ROWSAFTER MATCH SKIP TO FIRST DIFFPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY MATCH#, YEAR;
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
SELECT MATCH#, YEAR, WINNER, SONG, POINTS, VARFROM (SELECT * FROM EUROVISION_WINNERS
WHERE YEAR BETWEEN 1971 AND 1991)MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,CLASSIFIER() VAR
ALL ROWS PER MATCH WITH UNMATCHED ROWSAFTER MATCH SKIP TO FIRST DIFFPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY MATCH#, YEAR;
FROM_YEAR
TO_YEAR
9
NON_WINNING_YEARS
WINNER
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
FROM_YEAR
TO_YEAR
9
WINNER
SELECT MATCH#, WINNER, FROM_YEAR, TO_YEAR,NON_WINNER_YEARS
FROM (SELECT * FROM EUROVISION_WINNERS WHERE YEAR BETWEEN 1971 AND 1991)
MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,A.WINNER WINNER,FIRST(YEAR) FROM_YEAR,LAST(YEAR) TO_YEAR,COUNT(DIFF.*) NON_WINNER_YEARS
ONE ROW PER MATCHAFTER MATCH SKIP TO FIRST DIFFPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY MATCH#;
NON_WINNING_YEARS
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
FROM_YEAR
TO_YEAR
9
WINNER
SELECT MATCH#, WINNER, FROM_YEAR, TO_YEAR,NON_WINNER_YEARS
FROM (SELECT * FROM EUROVISION_WINNERS WHERE YEAR BETWEEN 1971 AND 1991)
MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,A.WINNER WINNER,FIRST(YEAR) FROM_YEAR,LAST(YEAR) TO_YEAR,COUNT(DIFF.*) NON_WINNER_YEARS
ONE ROW PER MATCHAFTER MATCH SKIP TO FIRST DIFFPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY MATCH#;
NON_WINNING_YEARS
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
FROM_YEAR
TO_YEAR
9
WINNER
SELECT MATCH#, WINNER, FROM_YEAR, TO_YEAR,NON_WINNER_YEARS
FROM (SELECT * FROM EUROVISION_WINNERS WHERE YEAR BETWEEN 1971 AND 1991)
MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,A.WINNER WINNER,FIRST(YEAR) FROM_YEAR,LAST(YEAR) TO_YEAR,COUNT(DIFF.*) NON_WINNER_YEARS
ONE ROW PER MATCHAFTER MATCH SKIP TO FIRST DIFFPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY MATCH#;
NON_WINNING_YEARS
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
FROM_YEAR
TO_YEAR
9
WINNER
SELECT MATCH#, WINNER, FROM_YEAR, TO_YEAR,NON_WINNER_YEARS
FROM (SELECT * FROM EUROVISION_WINNERS WHERE YEAR BETWEEN 1971 AND 1991)
MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,A.WINNER WINNER,FIRST(YEAR) FROM_YEAR,LAST (YEAR) TO_YEAR,COUNT(DIFF.*) NON_WINNER_YEARS
ONE ROW PER MATCHAFTER MATCH SKIP TO FIRST DIFFPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY MATCH#;
NON_WINNING_YEARS
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
FROM_YEAR
TO_YEAR
9
WINNER
SELECT MATCH#, WINNER, FROM_YEAR, TO_YEAR,NON_WINNER_YEARS
FROM (SELECT * FROM EUROVISION_WINNERS WHERE YEAR BETWEEN 1971 AND 1991)
MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,A.WINNER WINNER,FIRST(YEAR) FROM_YEAR,LAST (YEAR) TO_YEAR,COUNT(DIFF.*) NON_WINNER_YEARS
ONE ROW PER MATCHAFTER MATCH SKIP TO FIRST DIFFPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY MATCH#;
NON_WINNING_YEARS
COUNT
MAX
MIN
SUM
AVG
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
FROM_YEAR
TO_YEAR
9
WINNER
SELECT MATCH#, WINNER, FROM_YEAR, TO_YEAR,NON_WINNER_YEARS
FROM (SELECT * FROM EUROVISION_WINNERS WHERE YEAR BETWEEN 1971 AND 1991)
MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,A.WINNER WINNER,FIRST(YEAR) FROM_YEAR,LAST (YEAR) TO_YEAR,COUNT(DIFF.*) NON_WINNER_YEARS
ONE ROW PER MATCHAFTER MATCH SKIP TO FIRST DIFFPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY MATCH#;
NON_WINNING_YEARS
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
FROM_YEAR
TO_YEAR
9
WINNER
NON_WINNING_YEARS
SELECT MATCH#, WINNER, FROM_YEAR, TO_YEAR,NON_WINNER_YEARS
FROM (SELECT * FROM EUROVISION_WINNERS WHERE YEAR BETWEEN 1971 AND 1991)
MATCH_RECOGNIZE (ORDER BY YEARMEASURESMATCH_NUMBER() MATCH#,A.WINNER WINNER,FIRST(YEAR) FROM_YEAR,LAST (YEAR) TO_YEAR,COUNT(DIFF.*) NON_WINNER_YEARS
ONE ROW PER MATCHAFTER MATCH SKIP TO FIRST DIFFPATTERN (A SAME* DIFF+ LIKE_FIRST+)DEFINESAME AS WINNER = PREV(WINNER),DIFF AS WINNER != A.WINNER,LIKE_FIRST AS WINNER = A.WINNER
)ORDER BY MATCH#;
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Fibonacci NumbersX123456789
10111213141516171819202122
F
SELECT * FROM (select rownum X from dual connect by level<=100)MATCH_RECOGNIZE (ORDER BY XMEASURESCLASSIFIER() AS F_OR_NOT
ALL ROWS PER MATCHPATTERN ( (F|NF)+ )DEFINE F AS (X = 1 OR
X = 2 OR X = LAST(F.X,1) + LAST(F.X,2))
);
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Fibonacci NumbersX123456789
10111213141516171819202122
F
SELECT * FROM (select rownum X from dual connect by level<=100)MATCH_RECOGNIZE (ORDER BY XMEASURESCLASSIFIER() AS F_OR_NOT
ALL ROWS PER MATCHPATTERN ( (F|NF)+ )DEFINE F AS (X = 1 OR
X = 2 OR X = LAST(F.X,1) + LAST(F.X,2))
);
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Fibonacci NumbersX123456789
10111213141516171819202122
F
SELECT * FROM (select rownum X from dual connect by level<=100)MATCH_RECOGNIZE (ORDER BY XMEASURESCLASSIFIER() AS F_OR_NOT
ALL ROWS PER MATCHPATTERN ( (F|NF)+ )DEFINE F AS (X = 1 OR
X = 2 OR X = LAST(F.X,1) + LAST(F.X,2))
);
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Fibonacci NumbersX123456789
10111213141516171819202122
F
SELECT * FROM (select rownum X from dual connect by level<=100)MATCH_RECOGNIZE (ORDER BY XMEASURESCLASSIFIER() AS F_OR_NOT
ALL ROWS PER MATCHPATTERN ( (F|NF)+ )DEFINE F AS (X = 1 OR
X = 2 OR X = LAST(F.X,1) + LAST(F.X,2))
);
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Fibonacci NumbersX123456789
10111213141516171819202122
F
SELECT * FROM (select rownum X from dual connect by level<=100)MATCH_RECOGNIZE (ORDER BY XMEASURESCLASSIFIER() AS F_OR_NOT
ALL ROWS PER MATCHPATTERN ( (F|NF)+ )DEFINE F AS (X = 1 OR
X = 2 OR X = LAST(F.X,1) + LAST(F.X,2))
);
NF
Implicit Pattern Variable
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Fibonacci NumbersX123456789
10111213141516171819202122
F
SELECT * FROM (select rownum X from dual connect by level<=100)MATCH_RECOGNIZE (ORDER BY XMEASURESCLASSIFIER() AS F_OR_NOT
ALL ROWS PER MATCHPATTERN ( (F|NF)+ )DEFINE F AS (X = 1 OR
X = 2 OR X = LAST(F.X,1) + LAST(F.X,2))
);
Pattern
Alternation
NF
Implicit Pattern Variable
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Fibonacci NumbersX123456789
10111213141516171819202122
F
SELECT * FROM (select rownum X from dual connect by level<=100)MATCH_RECOGNIZE (ORDER BY XMEASURESCLASSIFIER() AS F_OR_NOT
ALL ROWS PER MATCHPATTERN ( (F|NF)+ )DEFINE F AS (X = 1 OR
X = 2 OR X = LAST(F.X,1) + LAST(F.X,2))
);
Pattern
Grouping
NF
Implicit Pattern Variable
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Fibonacci NumbersX123456789
10111213141516171819202122
F
SELECT * FROM (select rownum X from dual connect by level<=100)MATCH_RECOGNIZE (ORDER BY XMEASURESCLASSIFIER() AS F_OR_NOT
ALL ROWS PER MATCHPATTERN ( (F|NF)+ )DEFINE F AS (X = 1 OR
X = 2 OR X = LAST(F.X,1) + LAST(F.X,2))
);
NF
Implicit Pattern Variable
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Fibonacci Numbers
SELECT * FROM (select rownum X from dual connect by level<=100)MATCH_RECOGNIZE (ORDER BY XMEASURESCLASSIFIER() AS F_OR_NOT
ALL ROWS PER MATCHPATTERN ( (F|NF)+ )DEFINE F AS (X = 1 OR
X = 2 OR X = LAST(F.X,1) + LAST(F.X,2))
);
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Fibonacci Numbers
SELECT * FROM (select rownum X from dual connect by level<=100)MATCH_RECOGNIZE (ORDER BY XMEASURESCLASSIFIER() AS F_OR_NOT
ALL ROWS PER MATCHPATTERN ( (F|{-NF-})+ )DEFINE F AS (X = 1 OR
X = 2 OR X = LAST(F.X,1) + LAST(F.X,2))
);
Pattern
Exclusion
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Fibonacci Numbers
SELECT * FROM (select rownum X from dual connect by level<=100)MATCH_RECOGNIZE (ORDER BY XMEASURESCLASSIFIER() AS F_OR_NOT
ALL ROWS PER MATCHPATTERN ( (F|{-NF-})+ )DEFINE F AS (X = 1 OR
X = 2 OR X = LAST(F.X,1) + LAST(F.X,2))
);
This presentation is available in http://db-oriented.com/presentations © O
ren N
akdim
on
© O
ren N
akdim
on
Additional Resources
The Documentation: https://docs.oracle.com/en/database/oracle/oracle-database/18/dwhsg/sql-pattern-matching-data-warehouses.html
Keith Laker’s blog: https://oracle-big-data.blogspot.com/
Stew Ashton’s blog: https://stewashton.wordpress.com/category/match_recognize/