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

标签 mysql sql select pattern-matching mariadb-10.1

我有一个非常简单的表格,类似于:

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,但我不知道该怎么做。

感谢任何帮助!

最佳答案

您可以首先找到匹配的行,然后检查具有 leadlag 的连续 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/

相关文章:

mysql - 如何充分利用mysql中的索引?

php - 将数组传递给 mysql

php - 如何上传多个文件,将它们的路径存储在mysql数据库行的不同列中

c# - MVC 5 尝试注册新帐户并获取 "Invalid column name ' 用户名'。”

php - 如何仅在日期之间使用选择(sql)

php - 如何在php、mysql数据库中将数字保存为0001或0006?

sql - Firebird 自动增量问题

mysql - Netbeans 将查询中的数据放入变量中

mysql - 从游标中的选择插入 - MySQL

HTML 在 iPhone 中选择 : how to turn off ellipses?