CREATE TABLE `finals` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(10) DEFAULT NULL,
`result` char(4) DEFAULT NULL,
PRIMARY KEY (`id`)
);
地点:
ID是一个自增键,name是人的名字,result可以是通过或失败
示例数据
mysql> select * from finals;
+----+------+--------+
| id | name | result |
+----+------+--------+
| 1 | John | Pass |
| 2 | John | Fail |
| 3 | John | Pass |
| 4 | Kyle | Pass |
| 5 | John | Pass |
| 6 | Kyle | Pass |
| 7 | Kyle | Pass |
| 8 | Kyle | Fail |
+----+------+--------+
8 rows in set (0.00 sec)
解释
我正在尝试获取至少有连续三个"Pass"的人员姓名。 所以,期望的结果是: "Kyle" 因为"Kyle"有连续三个"Pass",即ID 4、6、7。
请注意,我不关心这个序列是否被其他人的记录中断,但如果同一个人的记录中断后出现了"Fail"的值,则我会在结果中排除该人员。
这就是为什么"John"不在期望的结果中。也就是说,虽然"John"总共有三个"pass",但它们被一个"Fail"打断,所以我想将其从结果中排除。
我尝试了以下查询:
mysql> SELECT name, GROUP_CONCAT(result ORDER BY id) as result_str FROM finals GROUP BY name having result_str LIKE '%Pass,Pass,Pass%';
+------+---------------------+
| name | result_str |
+------+---------------------+
| Kyle | Pass,Pass,Pass,Fail |
+------+---------------------+
1 row in set (0.00 sec)
它有效,这是期望的结果。然而,我正在寻找其他方法来:
- 更加通用
- 避免对GROUP_CONCAT结果长度的限制。
提前感谢您。