看板 PHP 關於我們 聯絡資訊
select grade as '分數', nameid as '學生編號',DATEDIFF(kdate,a) as '幾日內最高' FROM (select t.grade,t.nameid,t.kdate (select kdate from 資料表 where gradelist >= t.grade and nameid = t.nameid and kdate < t.kdate order by kdate desc limit 1) as a from gradelist t where kdate = '輸入日期' group by t.nameid) A 試試看這樣子呢? 要先把當日學生成績輸入 之後就可以依照輸入日期來看每位學生的成績 以及相隔幾天內的最高分 當然如果是史無前例的最高分或是最低分可能就要把DATEDIFF那邊再做更正(用case) 但是三層還是很耗就是了XD ※ 引述《jami520 (我的生命因你而發光)》之銘言: : 目前有個成績表會記錄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個 : 不曉得是否有其他的做法可以做得到呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.35.96.157 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1449658662.A.513.html ※ 編輯: wilson200106 (114.35.96.157), 12/09/2015 18:59:48
jami520: 感謝大大回覆,這樣三層雖然很耗資源,但或許可以跟之前 12/11 14:01
jami520: 作法做比較一下,只是多了一個方法可以參考,謝謝 12/11 14:01