おそらくパフォーマンスの問題、または間違っている可能性があります。SQLグループ化の実行回数が複数の列にわたって異なる
TabelA:
StudentID | Date
----------|------
1 | 20140101
1 | 20140102
1 | 20170103
2 | 20140101
2 | 20170103
3 | 20140101
3 | 20170103
3 | 20170104
(にtableAの主キーは、次のとおりです。(studentID、日)
TableB:
StudentID|Date |Class | Warning | Instructor
---------|---------|--------|---------|-----------
1 |20140101 |History |Tardy | Mr.H
1 |20140101 |History |Homework | Mr.H
1 |20140101 |Biology |Tardy | Mr.B
1 |20140102 |Biology |Homework | Mr.B
1 |20140102 |History |Tardy | Mr.H
2 |20140101 |Math |Test | Mr.M
2 |20140101 |Art |Test | Mr.A
3 |20140101 |History |Tardy | Mr.H
3 |20170103 |History |Tardy | Mr.H
うまくいけば、これは十分なデータ 目標:にtableAの各StudentIdと日付については、
結果が期待される:
(英語)ここでは10StudentID | Date | Count
----------|---------|--------
1 |20140101 |3
1 |20140102 |4
1 |20170103 |4
2 |20140101 |2
2 |20170103 |2
3 |20140101 |1
3 |20170103 |1
3 |20170104 |1
私が持っているものです。
select A.studentID, A.date, count(1)
from TableA A
cross apply (select distinct B.class,B.warning,B.instructor
from TableB B
where A.studentID = B.studentID
and B.date <= A.date) Z
group by A.studentID, A.date
order by A.studentID, A.date
は、大規模なデータセットのために、この結果を達成するためのより良い/代替方法はありますか? 問題:大きなデータセット(100万行)の最終結果セットを取得できません。ただ走り続けます。
ありがとうございます!
ソリューション:句
TableBのは、すでに(日付、studentID)のインデックスと
を持っていた "順" 削除は、私が(studentId、日付)表B上の別のインデックスを追加しました。
時差:前:> 15分Now:< 30秒
上の潜在的な不足しているインデックスのあなたの実行計画を調べるのでしょうか?それは曖昧です – SouXin
すべての日付がTableBにあるとは限りません。換言すれば、表AにはTableBにはない日付がある。これは、日付20170103の結果セットに表示されます。TableAは、ほぼすべての日をカバーするマスター表です。 –
これはどのように4ですか?あなたの例によると? 1 | 20140102 | 4 –