如何取到主表及相关明细最新的一条记录?百分请教

denghan 2006-08-28 04:26:42
主表 TA
-------------------
流水号 主键
....

明细表 TB
-------------------
序号 ID 主键,用序列实现自动增长1
流水号 以此与主表关联
时间 ...
操作内容 varchar(256)

现在想取到如下格式的记录
主表字段+明细表最新的一条的字段,例如
0001... 0001 操作0001号记录内容
0002... 0002 操作0002号记录内容

当明细表中流水号相同时,序号ID是最大的即为最新的明细记录
明细表中有0或若干条记录与主表对应。

相关环境说明:winXP+SP2,Orcale 9i

请教大侠们,此SQL语句该如何写才比较高效?
谢谢!
...全文
261 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
denghan 2006-09-01
  • 打赏
  • 举报
回复
谢谢大家的帮助
denghan 2006-08-30
  • 打赏
  • 举报
回复
目前主表有60000条,平均一条记录有3条明细,明细表约有200000条记录
feng2 2006-08-29
  • 打赏
  • 举报
回复
支持xiaoxiao1984(笨猫儿^_^)
rn是分组排序的序号,按主表流水号分组排序。
yown 2006-08-29
  • 打赏
  • 举报
回复

select 流水号,(select top 1 id from tb where 流水号=ta.流水号 order by id desc ) from ta
smilingchen 2006-08-29
  • 打赏
  • 举报
回复

SELECT tb.流水号,tb.序号,tb.备注
FROM (select ta.流水号,max(tb.序号) 序号 from ta,tb where ta.流水号 = tb.流水号 group by ta.流水号) temp,tb
WHERE temp.流水号 = tb.流水号
AND temp.序号 = tb.序号


最后问一下,你的表数据量多大?
denghan 2006-08-28
  • 打赏
  • 举报
回复
xiaoxiao1984(笨猫儿^_^) :
你的SQL语句中的rn是什么?
denghan 2006-08-28
  • 打赏
  • 举报
回复
select
a.流水号,b.*
from
TA a,TB b
where
a.流水号=b.流水号 and b.序号=(select MAX(序号) from TB where 流水号=b.流水号)
-----------
不对啊,我主表有N条记录,执行这个查询后,只显示了一条记录
xiaoxiao1984 2006-08-28
  • 打赏
  • 举报
回复
select a.流水号,b.* from TA a,
(select 流水号,时间,操作内容 from
(select 流水号,时间,操作内容, row_number()over(partition by 流水号 order by id desc) as rn from TB)
where rn = 1 )b
where a.流水号 = b.流水号(+)
子陌红尘 2006-08-28
  • 打赏
  • 举报
回复
select
a.流水号,b.*
from
TA a,TB b
where
a.流水号*=b.流水号 and b.序号=(select MAX(序号) from TB where 流水号=b.流水号)
子陌红尘 2006-08-28
  • 打赏
  • 举报
回复
select
a.流水号,b.*
from
TA a,TB b
where
a.流水号=b.流水号 and b.序号=(select MAX(序号) from TB where 流水号=b.流水号)

17,377

社区成员

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

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