聚合求最大值然后筛选?

梅小西Echo 2013-10-17 10:54:46
有个学生表,有id(学号),name(名字),date(日期),score(分数)
里面存了很多学生不同日期的分数,每名学生多个日期的记录,每天一个分数,
现在想求每个学生分数最高的那条记录,所有字段都要查出来,我用group by 能求出每名学生的最大分数,但是把date也要选出来,我就无力了, 说group by必须包含date,但是select包含了date结果又不对。
...全文
175 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2013-10-17
  • 打赏
  • 举报
回复
修改一下:
select id,name,date,score
from 
(
select *,
       ROW_NUMBER() over(partition by id 
                             order by score desc) as rownum
from 学生表
)t
where rownum=1
LongRui888 2013-10-17
  • 打赏
  • 举报
回复
如果是sql server 2005以后的版本:
select id,name,date,score
from 
(
select *,
       ROW_NUMBER() over(partition by id 
                             order by score desc) 
from 学生表
)t
where rn=1
Andy__Huang 2013-10-17
  • 打赏
  • 举报
回复
select *
from 
(
select *,rn=ROW_NUMBER() over(partition by 学号 order by 分数 desc) from 成绩表
)t
where rn=1
發糞塗牆 2013-10-17
  • 打赏
  • 举报
回复
select * from tb a where exists (select 1 from (select id,max(score)score from tb group by id) b where a.id=b.id and a.score=b.score)
天-笑 2013-10-17
  • 打赏
  • 举报
回复
你这问题简单说就是每个学生最大分数对应的所有记录信息 1:用row_number() 函数,按学生分组,分数倒序 ,取序号为1 的 2:将分数格式化成固定长度的字符串如入char(4)+日期固定长度字符串char(10) 然后求这个最大字符串,截取右边10位 就是 日期

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧