学生表 [student] id name isDelete学生成绩表[record] id time result studentId学生和学生成绩表是1-N关系,就是一个学生会有多次成绩
我现在要查出每个学生“最近一次成绩”>100的学生,一行sql应该怎么写好像不难,但是我太弱了id都是seq自增长的
我现在要查出每个学生“最近一次成绩”>100的学生,一行sql应该怎么写好像不难,但是我太弱了id都是seq自增长的
解决方案 »
- max+1的值
- oracle10g 快照问题!!
- oracle存储过程编写的问题1
- oracle更改监听端口号
- oracle里怎么实现跟Sql Server相同的定时任务调度?请高手帮忙写个例子
- oracle9i用OEM管理数据库,其中有几个术语请大家给予解释一下,多谢
- SOS,高分急求帮助,关于orcale连接问题?
- 请问想在oracle客户端使用exp/imf进行备份恢复,如何可以实现?
- 如何在windows xp 下安装oracle 9i? 急救120!!
- 哪有Toad软件下载,关于Oracle PL/SQL的?怎么得到注册号,谢谢
- 一道有点难度的oracle面试问题(sql查询语句)
- 请问如何导出 oracle 数据库中某个 owner 所属的所有的 package 以及 package 内容
T_Student表就是id name isDelete三个字段
T_Record表就是id time result studentId四个字段其中Record根据studentId和Student的id关联
select result,studentid from record a where result >100 and time =(select max(time) from record b where a.studentid=b.studentid group by b.studentid,b.result having b.result >100 )试试看勒
select name,studentid,result from record a where id=studentid and result > 100 and time =(select max(time) from record b where a.studentid=b.studentid group by b.studentid,b.result having b.result > 100 ) 再试试看勒
刚才的字查询错了,修改了下
select zz.studentId
from (
select r.studentId,
row_number() over(partition by r.studentId order by r.time desc) as rn,
r.result
from record r,
student s
where r.studentId = s.id
)zz
where rn = 1
and r.result > 100;
select zz.studentId
from (
select r.studentId,
row_number() over(partition by r.studentId order by r.time desc) as rn,
r.result
from record r,
student s
where r.studentId = s.id
)zz
where zz.rn = 1
and zz.result > 100;
select name from(
select max(time) as time,name from student s,record r where s.id=r.studentid group by name
) t,record r
where r.result>100 and r.time=t.time
思路是
按名字分组查出每个人最近一次考试时间然后拿最后一次考试时间和record表关连找出对应成绩单 并进行判断是否大于100
where result>100 and not exists(
select 1 from T_Record B
where a.studentId = b.studentId and b.time>a.time and b.result>100
)