sqlite - sqlite count 1 value based on all previous row and restart count when row value is 0
问题描述
我有一个包含 0 和 1 值的 sqlite 列,我需要获得最大连续 1 值。感谢您的帮助
sqlite> SELECT data_suites from my_table ;
0
0
1
1
1 <--- 3 consecutive 1
0
1
1
1
1 <--- 4 consecutive 1
0
1
1
1
1
1
1 <--- 6 consecutive 1
我期待得到
6
解决方案
表是无序集,因此您需要一列来指示排序(id,update_time,...)。拥有它后,您可以使用窗口函数:
WITH cte AS (
SELECT *,ROW_NUMBER() OVER(ORDER BY id)-ROW_NUMBER() OVER(PARTITION BY data_suites ORDER BY id) grp
FROM my_table
)
SELECT COUNT(*) cnt
FROM cte
WHERE data_suites = 1
GROUP BY grp
ORDER BY cnt DESC LIMIT 1;
-- answer 6
WITH cte AS (
SELECT *, ROW_NUMBER() OVER(ORDER BY id) - ROW_NUMBER() OVER(PARTITION BY data_suites ORDER BY id) grp
FROM my_table
)
SELECT grp,MIN(id) AS start, MAX(id) AS end, COUNT(*) cnt
FROM cte
WHERE data_suites = 1
GROUP BY grp;
输出:
+------+--------+------+-----+
| grp | start | end | cnt |
+------+--------+------+-----+
| 2 | 3 | 5 | 3 |
| 3 | 7 | 10 | 4 |
| 4 | 12 | 17 | 6 |
+------+--------+------+-----+
推荐阅读
- powershell - PS1 脚本中的路径变量 - 如果 PS1 通过 CMD 执行
- javafx - 如何从嵌套的 TableColumn 访问父值
- python - Python FBX SDK – 如何启用自动完成?
- vue.js - Bootstrap Vue Modal 在 v-for 中显示重复
- ios - NStableview 与弹出窗口中的图像
- javascript - 使用 Sails.js 的类别和子类别产品层次结构
- notepad++ - 如何在 Notepad++ 中将列表添加到每一行的末尾
- css - 当浏览器宽度发生变化时,CSS缩放背景图像
- c - 分叉进程的执行
- ios - 键盘上方的空白区域(IOS Safari)