【发布时间】:2021-11-28 19:52:42
【问题描述】:
我有一个非常简单的表格,类似于:
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,但我不知道该怎么做。
任何帮助表示赞赏!
【问题讨论】:
-
select version();显示什么? -
所以您是专门寻找 val 29、21、14 的模式,而没有其他?是什么让行连续,id 有序,没有插入行,或其他什么?
-
连续,因为没有插入行。我使用的是 HeidiSQL 9.5,选择 version() 显示 10.1.37-MariaDB
-
我并不是专门寻找那个模式,它会是用户输入的任何内容,但是为了弄清楚我们可以使用该模式的查询语法。我会将用户输入放入 vars 并在查询中使用 vars。
-
最简单的方法是使用 lag() 或 Lead() 函数,但这需要 mariadb 10.2 或 mysql 8
标签: mysql sql select pattern-matching mariadb-10.1