提取具有超过阈值的连续模式的行
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。
我目前有这组数据
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。