作者wilson200106 (RTK)
看板PHP
标题Re: [请益] 分别找出学生成绩为几天新高
时间Wed Dec 9 18:57:37 2015
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://webptt.com/cn.aspx?n=bbs/PHP/M.1449658662.A.513.html
※ 编辑: wilson200106 (114.35.96.157), 12/09/2015 18:59:48
1F:推 jami520: 感谢大大回覆,这样三层虽然很耗资源,但或许可以跟之前 12/11 14:01
2F:→ jami520: 作法做比较一下,只是多了一个方法可以参考,谢谢 12/11 14:01