目前有个成绩表会记录300个学生每天的成绩
目前我想做像下方这样呈现
学生姓名 成绩为几天新高分
学生A 5
学生B 32
学生C 18
学生D 3
............................
请问大家这样会如何做到上述的结果呢?
初步我是想说用循环跑三百个学生
而每个学生又再从最近的日期开始往前推去跑循环判读如下
do{
$sql="SELECT nameid FROM (SELECT grade, nameid FROM gradelist
where nameid=循环学生id and kdate=今天) a1
LEFT JOIN (SELECT MAX(grade) as MaxGrade, nameid FROM gradelist
where nameid=循环学生id and kdate<=今天 and kdate>=每天日期
group by nameid) a2 ON a1.nameid=a2.nameid
where a1.grade=ab2.MaxGrade";
}while(所有学生的循环);
当选出来为0笔的时候就终止循环,代表已经找到某学生成绩为几天的新高
然后再跑下一位学生的数据
感觉是不太聪明的做法,因为假设日期有300天好了
这样循环就要跑300学生*300天=9000个
不晓得是否有其他的做法可以做得到呢?