1

私はこの答えを見つけるために少しグーグルを試してみましたが、SQL Server の OVER() 関数とエミュレートする方法に関する記事に出くわしました...しかし、それは私の給与等級を上回っています:P

簡単にして、生徒のテーブルとアクション列があるとします。手を挙げた回数、手を挙げなかった回数、またはクラスに出席しなかった回数をカウントするクエリを作成したいと考えています。週末のクラスがないため、today-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)

これにより、テーブル内のすべての連続するアクション (連続するアクションごとに 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
于 2013-03-19T16:43:33.840 に答える