1

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

我会保持简单,说我有一个学生表和一个操作列。我想创建一个查询来计算他们连续举手、未举手或未上课的次数。没有周末班,所以它必须计算实际记录,而不仅仅是今天-FirstFoundDate。如果学生 A 连续 3 周举手(计数为 15=5 天 X 3 周)但随后没有出现在课堂上,则计数为 0。

有任何想法吗?

谢谢,

4

1 回答 1

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)

这应该为我们提供表中的所有连续动作,每次连续出现一行。然后 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
于 2013-03-19T16:43:33.840 回答