我有一个非常简单的表格,类似于:
id | val
----------
1 | 20
2 | 22
3 | 29
4 | 21
5 | 14
6 | 9
7 | 15
我希望能够识别连续行中的模式。例如,如果输入是“29,21,14”,则有三个连续的行匹配,我想返回:
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,但我不知道该怎么做。
感谢任何帮助!
最佳答案
您可以首先找到匹配的行,然后检查具有 lead
和 lag
的连续 id
:
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)
关于mysql - MySQL 中可以对连续行使用模式匹配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69502893/