如何更简便的找出最新值

eion 2011-11-05 12:01:32

create table sc(
student_id char(10),
course_id char(5),
sc_time datetime,
score decimal(3)


在上面的选课表中,允许学生可以在不同的学期选择相同的一门课程(如补考等),
但如何选择出最后的那次成绩?当然创建一个视图可以满足

create view last_sc
as
select student_id, course_id, max(sc_time)
from sc
group by student_id, course_id;

create view last_sc_score
as
select student_id, course_id, grade
from sc left join last_sc
on sc.student_id = last_sc.student_id and sc.course_id=last_sc.student_id


可这样毕竟笨了,有么样更简便或新鲜的方法呢?忘大家指教!
...全文
135 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyj851011 2012-02-17
  • 打赏
  • 举报
回复
正在找相关写法...学习了
xiaobn_cn 2011-12-29
  • 打赏
  • 举报
回复
楼主实际上你已经自己把答案写出来了,只是差了一个知识点,就是在sql中,是可以把一个select结果集当做一个视图来使用的,所以你只要把那个视图的select语句直接放到你的sql中使用就可以了,不需要去创建这个视图。具体估法楼上几位已经给出答案了。
dawugui 2011-12-28
  • 打赏
  • 举报
回复

select t.* from sc t where sc_time = (select max(sc_time) from sc where student_id = t.student_id) order by t.student_id

select t.* from sc t where not exists (select 1 from sc where student_id = t.student_id and sc_time > t.sc_time) order by t.student_id
mooji_kj 2011-12-28
  • 打赏
  • 举报
回复
SELECT *
FROM sc
WHERE (student_id, course_id, sc_time) IN (
SELECT student_id, course_id,
MAX (sc_time) TIME
FROM sc
GROUP BY student_id, course_id)
xpingping 2011-12-28
  • 打赏
  • 举报
回复
select student_id ,course_id ,sc_time ,score   from(
select student_id ,course_id ,sc_time ,score ,
row_number() over(partition by student_id ,course_id order by sc_time desc) rn
) where rn=1
eion 2011-12-28
  • 打赏
  • 举报
回复
看来是结不了题了
大虾看看吧,好久了
eion 2011-11-05
  • 打赏
  • 举报
回复
后面那条SQL语句有些问题
大家理会意思即可

create view last_sc(student_id, course_id, max_sc_time)
as
select student_id, course_id, max(sc_time)
from sc
group by student_id, course_id;

create view last_sc_score
as
select student_id, course_id, grade
from sc left join last_sc
on sc.student_id = last_sc.student_id and sc.course_id=last_sc.student_id and sc_time=max_sc_time
eion 2011-11-05
  • 打赏
  • 举报
回复
沙发自己座

不要告诉我为什么不找最高分,这不是逻辑问题,仅仅是个技术问题
eion 2011-11-05
  • 打赏
  • 举报
回复
是 oracle 数据库,其实是不是oracle都无所谓吧?

sc_time 表示选修的日期
我心飞翔 2011-11-05
  • 打赏
  • 举报
回复
sc_time字段表示的是什么?
既然不同学期可以选择同一门课程,那就应该在表中增加一个字段,表示学期。
opps_zhou 2011-11-05
  • 打赏
  • 举报
回复
你是 oracle 数据库吗?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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