MySQL:计算值出现的连续次数

时间:2013-03-18 19:09:31

标签: mysql sql

我已经做了一些谷歌搜索尝试找到这个答案,甚至遇到了SQL Server的OVER()函数和一篇关于如何模拟的文章......但它高于我的工资等级:P

我会保持简单,并说我有一张学生表和一个行动专栏。我想创建一个查询,它将计算他们举手,没有举手或没有上课的连续次数。没有周末课程,所以它必须计算实际记录,而不仅仅是今天的FirstFoundDate。如果学生A连续3周举手(计数为15 = 5天X 3周),但未上课,则计数为0。

有什么想法吗?

谢谢,

1 个答案:

答案 0 :(得分:2)

我一直在考虑这个,让我们重新开始...

怎么样

select *
from student_action maindata
where not exist (select * from student_action action_count
                 where maindata.student_id = action_count.student_id
                   and maindata.action_timestamp < action_count.action_timestamp
                   and maindata.action <> action_count.action)

这应该给我们表中的所有连续动作,每次连续发生一行。然后小组将计算它们。

select count(*), maindata.student_id, maindata.action
from student_action maindata
where not exist (select * from student_action action_count
                 where maindata.student_id = action_count.student_id
                   and maindata.action_timestamp < action_count.action_timestamp
                   and maindata.action <> action_count.action)
group by maindata.student_id, maindata.action