可以在 MySQL 中对连续行使用模式匹配吗?

Can pattern matching be used in MySQL for consecutive rows?

我有一个很简单的table,类似于:

id  | val
----------
1   | 20
2   | 22
3   | 29
4   | 21
5   | 14
6   | 9
7   | 15

我希望能够识别连续行中的模式。比如输入“29,21,14”,有连续三行匹配,我想return:

id  | val
----------
3   | 29
4   | 21
5   | 14

如果行不连续,则没有匹配项。

我的尝试无效:

SELECT id as firstid, val from tbl100 WHERE `val` = '29' AND firstid+1 = '21' AND firstid+2 = '14'

问题显然是我的查询找到 val 29,然后查找 id 21 和 id 14,它应该查找 val 21 和 val 14,但我不知道该怎么做。

感谢任何帮助!

您可以先找到匹配的行,然后使用 leadlag:

检查连续的 ids
with m_vals as (
   select t1.* from t t1 join i t2 on t1.val = t2.val
)
select t3.id, t3.val from (select m.*, lag(m.id) over (order by m.id) l, lead(m.id) over (order by m.id) t from m_vals m) t3
where (t3.l is null or t3.l + 1 = t3.id) and (t3.t is null or t3.t - 1 = t3.id)