提取具有超过阈值的连续模式的行

Extracting rows with a consecutive pattern that exceeds a threshold

我目前有这组数据

Id pattern
1 1
2 2
3 1
4 2
5 3
6 4
7 1
8 2
9 1
10 2
11 3

我有升序排列的 ID,还有一个名为 pattern 的列。目标是仅检索 table.

中连续模式 >=3 的行

所以结果是:

Id pattern
3 1
4 2
5 3
6 4
9 1
10 2
11 3

由于Ids 3-6的模式已经连续达到>=3,我们将return这4行。 ID 9-11 也是如此。

Id 1-2 没有达到阈值 3。Id 7-8 也一样。

非常感谢任何帮助!

使用 SUM() window 函数创建序列组,并使用 MAX() window 函数检查每个组中的最大模式:

SELECT Id, pattern
FROM (
  SELECT *, MAX(pattern) OVER (PARTITION BY grp) max_pattern
  FROM (
    SELECT *, SUM(pattern = 1) OVER (ORDER BY Id) grp
    FROM tablename
  ) t
) t
WHERE max_pattern >= 3;

或者,对于不支持 window 函数的 MySql 版本,使用相关子查询:

SELECT t1.*
FROM tablename t1
WHERE (SELECT t2.pattern FROM tablename t2 WHERE t2.Id = t1.Id + (3 - t1.pattern)) = 3; 

参见demo