可能是性能问题,或者是错误的。
TabelA:
StudentID | Date
----------|------
1 | 20140101
1 | 20140102
1 | 20170103
2 | 20140101
2 | 20170103
3 | 20140101
3 | 20170103
3 | 20170104
(tableA的主键是:(studentID,Date)
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
希望这是足够的数据。 目标:对于表A中的每个StudentId和日期,在表A中的指定日期之前获取不同(类,警告,指导者)的计数。
预期结果:
StudentID | 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万行)的最终结果集。它一直在运行。
谢谢!
解决方案:
删除了“order by”条款
TableB已经有(date,studentID)和
的索引
我在表B上添加了另一个索引(studentId,date)
时差:之前:&gt; 15分钟现在:&lt; 30秒
答案 0 :(得分:0)
我会看看inner join vs cross apply。由于tableB是自给自足的,我会使用连接而不是交叉应用。
ObjConfig.MyValue
如果您仍遇到性能问题,我会检查您在TableB上潜在缺失索引的执行计划