mysql - 计算mysql中的连续行
问题描述
我想在这里找到连续 1 出现 3 次或更长时间的 id。所以在输出中我只会看到 5,6,7,8。有人可以在这里帮我查询吗?
+------+----------+
| id | diff_chk |
+------+----------+
| 2 | 1 |
| 3 | 2 |
| 5 | 1 |
| 6 | 1 |
| 7 | 1 |
| 8 | 1 |
| 9 | 3 |
| 12 | 1 |
| 13 | 1 |
+------+----------
预期产出;
id
5
6
7
8
我尝试使用的查询没有获取我使用以下逻辑的正确结果。
select id,COUNT(1) OVER( PARTITION BY diff_chk ORDER BY id ) as w_func from table1 where w_func!=1
解决方案
这是差距和孤岛问题。尝试以下操作,这里是MySql 8.0
.
select
id
from
(
select
diff_chck,
id,
count(*) over (partition by diff_chck, rnk) as total
from
(
select
diff_chck,
id,
id - row_number() over (partition by diff_chck order by id) as rnk
from myTable
) t
) vals
where total > 2
order by
id
输出:
*-----*
| id |
*-----*
| 5 |
| 6 |
| 7 |
| 8 |
*-----*
推荐阅读
- javascript - Javascript html | 如何正确排序我的语言
- python - Keras模型参数在重新加载后都是“NaN”
- html - box-shadow is not working when sending html by email
- xamarin - Xamarin 3 堆栈布局
- sql - Oracle SQL 导致多列
- sql - Amazon Athena - 将时间戳转换为日期?
- view - 确定 SAS 数据集是表还是视图
- javascript - Javascript;这种“hasOwnProperty”的使用是多余的吗?
- hyperledger-fabric - Hyperledger composer with swarm network always rendering "MVCC_READ_CONFLICT"
- gdb - 什么是“劣等”?