Снежинка 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;

давая:

Другие вопросы по тегам