Re: [请益] 分别找出学生成绩为几天新高

楼主: wilson200106 (种子种子)   2015-12-09 18:57:37
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个
: 不晓得是否有其他的做法可以做得到呢?
作者: jami520 (我的生命因你而发光)   2015-12-11 14:01:00
感谢大大回复,这样三层虽然很耗资源,但或许可以跟之前作法做比较一下,只是多了一个方法可以参考,谢谢

Links booklink

Contact Us: admin [ a t ] ucptt.com