需求
假设有一张表如下,统计每个国家在lastval失败的次数,从最新失败的那一次开始计算。
mysql> select * from `history` order by id;
+----+---------+---------+
| id | country | lastval |
+----+---------+---------+
| 1 | US | 0.0000 |
| 2 | CN | 0.0000 |
| 3 | US | 0.0000 |
| 4 | CN | 3.0000 |
| 5 | CA | 0.0000 |
+----+---------+---------+
5 rows in set (0.00 sec)
分析,从数据中可见
- CN最后一次执行lastval是取到了,所以失败次数为0。
- US最后一次开始算起都是失败的,所以失败次数为2。
- CA最后一次失败开始算起都是失败的,次数得出为1
实现SQL
-- 所有的
SELECT
a.country, COUNT(a.id) AS num_zero
FROM
`history` a
LEFT JOIN
`history` b ON a.country = b.country AND b.lastval > 0
WHERE
a.lastval = 0
AND (a.id > b.id OR b.id IS NULL)
GROUP BY a.country;
结果
+---------+----------+
| country | num_zero |
+---------+----------+
| US | 2 |
| CA | 1 |
+---------+----------+
2 rows in set (0.00 sec)