gpt4 book ai didi

mysql - 分组用户,MySQL 上匹配的连续值

转载 作者:行者123 更新时间:2023-11-29 12:17:45 24 4
gpt4 key购买 nike

所以我有一个如下所示的表格:

student_id | date       | exam_id | value
-----------------------------------------
10000 | 2015-01-01 | 1234232 | 'PASSED'
10000 | 2015-01-02 | 3123323 | 'PASSED'
10000 | 2015-01-03 | 4012031 | 'PASSED'
10000 | 2015-01-04 | 5012031 | 'PASSED'
10000 | 2015-01-05 | 7012031 | 'PASSED'
10000 | 2015-01-06 | 6012031 | 'FAILED'
20000 | 2015-01-01 | 1234232 | 'PASSED'
20000 | 2015-01-02 | 3123323 | 'PASSED'
20000 | 2015-01-03 | 4012031 | 'PASSED'
20000 | 2015-01-04 | 5012031 | 'FAILED'
20000 | 2015-01-05 | 7012031 | 'PASSED'
20000 | 2015-01-06 | 6012031 | 'FAILED'
20000 | 2015-01-07 | 9012031 | 'PASSED'
30000 | 2015-01-01 | 1234232 | 'FAILED'
30000 | 2015-01-02 | 3123323 | 'PASSED'
30000 | 2015-01-03 | 4012031 | 'PASSED'
30000 | 2015-01-04 | 5012031 | 'PASSED'
30000 | 2015-01-05 | 7012031 | 'PASSED'
30000 | 2015-01-06 | 6012031 | 'PASSED'
30000 | 2015-01-07 | 6012031 | 'FAILED'

我想提取连续通过 5 次或更多考试的每个不同学生 (id)。所需的输出如下所示:

student_id 
----------
10000
30000

应该排除id为2000的学生,因为即使他通过了5次考试,他也不是连续5次通过的。

这对于脚本来说非常简单,但我想知道是否还有一个 MySQL 解决方案。

最佳答案

在 MySQL 中,最简单的方法可能是使用变量:

select distinct student_id
from (select t.*,
(@rn := if(@sp = concat(student_id, ':', value), @rn + 1,
if(@sp := concat(student_id, ':', value), 1, 1)
)
) as rn
from table t cross join
(select @rn := 0, @sp := '') vars
order by student_id, date
) t
where rn = 5 and value = 'passed'

子查询按日期和值枚举每个学生的行。外部查询选择枚举值为 5 且值为“通过”的不同学生。

关于mysql - 分组用户,MySQL 上匹配的连续值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29501550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com