我做了一些谷歌搜索来尝试找到这个答案,甚至遇到了 SQL Server 的 OVER() 函数和一篇关于如何模拟的文章......但它高于我的工资等级:P
我会保持简单,说我有一个学生表和一个操作列。我想创建一个查询来计算他们连续举手、未举手或未上课的次数。没有周末班,所以它必须计算实际记录,而不仅仅是今天-FirstFoundDate。如果学生 A 连续 3 周举手(计数为 15=5 天 X 3 周)但随后没有出现在课堂上,则计数为 0。
有任何想法吗?
谢谢,
我一直在思考这个问题,让我们重新开始……
怎么样
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)
这应该为我们提供表中的所有连续动作,每次连续出现一行。然后 group by 将计算它们。
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