Re: [請益] 分別找出學生成績為幾天新高

看板PHP作者 (RTK)時間8年前 (2015/12/09 18:57), 8年前編輯推噓1(101)
留言2則, 1人參與, 最新討論串2/2 (看更多)
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

12/11 14:01, , 1F
感謝大大回覆,這樣三層雖然很耗資源,但或許可以跟之前
12/11 14:01, 1F

12/11 14:01, , 2F
作法做比較一下,只是多了一個方法可以參考,謝謝
12/11 14:01, 2F
文章代碼(AID): #1MQ0acKJ (PHP)
文章代碼(AID): #1MQ0acKJ (PHP)