我已经做了一些谷歌搜索尝试找到这个答案,甚至遇到了SQL Server的OVER()函数和一篇关于如何模拟的文章......但它高于我的工资等级:P
我会保持简单,并说我有一张学生表和一个行动专栏。我想创建一个查询,它将计算他们举手,没有举手或没有上课的连续次数。没有周末课程,所以它必须计算实际记录,而不仅仅是今天的FirstFoundDate。如果学生A连续3周举手(计数为15 = 5天X 3周),但未上课,则计数为0。
有什么想法吗?
谢谢,
答案 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