Снежинка MATCH_RECOGNIZE для пропуска не важных событий
У меня есть следующие события, упорядоченные по времени их возникновения:
e4 -> e2 -> e2 -> e3 -> e10 -> e4
Как мне написать часть PATTERN MATCH_RECOGNIZE, чтобы сопоставить запись, если произошло событие e2, а затем произошло e4 (e2 до e4), независимо от того, есть ли между этими двумя другими событиями 0 или более?
e4 -> e2 -> e2 -> e3 -> e10 -> e4 - matched
e4 -> e2 -> e4 - matched
e4 -> e4 -> e2 -> e3 - not matched
e2 -> e10 -> e2 -> e5 -> e4 - matched
1 ответ
поэтому четыре последовательности, они могут быть минимально согласованы с:
WITH data AS (
SELECT * FROM VALUES
(1,'e4',1),(1,'e2',2),(1,'e2',3),(1,'e3',4),(1,'e10',5),(1,'e4',6),
(2,'e4',1),(2,'e2',2),(2,'e4',3),
(3,'e4',1),(3,'e4',2),(3,'e2',3),(3,'e3',4),
(4,'e2',1),(4,'10',2),(4,'e2',3),(4,'e5',4),(4,'e4',5)
)
SELECT * FROM data
match_recognize(
partition by column1
order by column3
measures
match_number() as "MATCH_NUMBER",
match_sequence_number() as msq,
classifier() as cl
all rows per match with unmatched rows
PATTERN (d1 d2* d3)
DEFINE d1 as column2 = 'e2',
d2 as column2 NOT IN ('e2','e4'),
d3 as column2 = 'e4'
)
ORDER BY 1,3;
давая: