私はこれについて考えてきました、そして最初からやり直しましょう...
どうですか
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)
これにより、テーブル内のすべての連続するアクション (連続するアクションごとに 1 つの行) が得られるはずです。次に、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