目前有個成績表會記錄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個
不曉得是否有其他的做法可以做得到呢?