Ниже для BigQuery Standard SQL
#standardSQL
SELECT * EXCEPT(flag) FROM (
SELECT id, type, sequence, 0 = COUNTIF(type = 'event2') OVER(win) flag
FROM `project.dataset.table`
WINDOW win AS (PARTITION BY id ORDER BY sequence ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
)
WHERE flag
Вы можете протестировать, поиграть с выше, используя примеры данных из вашего вопроса, как в примере ниже
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'abc123' id, 'event1' type, 1 sequence UNION ALL
SELECT 'abc123', 'event1', 2 UNION ALL
SELECT 'abc123', 'event1', 3 UNION ALL
SELECT 'abc123', 'event2', 4 UNION ALL
SELECT 'abc123', 'event1', 5 UNION ALL
SELECT 'abc123', 'event1', 6 UNION ALL
SELECT 'def456', 'event1', 4 UNION ALL
SELECT 'def456', 'event1', 5 UNION ALL
SELECT 'def456', 'event2', 6 UNION ALL
SELECT 'def456', 'event1', 7 UNION ALL
SELECT 'ghi789', 'event2', 1 UNION ALL
SELECT 'ghi789', 'event1', 2 UNION ALL
SELECT 'ghi789', 'event1', 3
)
SELECT * EXCEPT(flag) FROM (
SELECT id, type, sequence, 0 = COUNTIF(type = 'event2') OVER(win) flag
FROM `project.dataset.table`
WINDOW win AS (PARTITION BY id ORDER BY sequence ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
)
WHERE flag
-- ORDER BY id, sequence
с выводом
Row id type sequence
1 abc123 event1 1
2 abc123 event1 2
3 abc123 event1 3
4 abc123 event2 4
5 def456 event1 4
6 def456 event1 5
7 def456 event2 6
8 ghi789 event2 1