查找从表里面日期最后的一条记录(急)

coffeedou 2007-08-30 09:14:27
从表b里面有多条记录,里面有时间字段t1,和部门字段d1,和主表a用两个关键字段关联k1,k2,如何查出最近的部门,即时间最靠后的部门呢?
select a.k1,a.k2,b.d1 from a
left join b on a.k1=b.k1 and a.k2=b.k2
...全文
833 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bjt_ 2007-09-05
  • 打赏
  • 举报
回复
kao,shanhqk(山) ( )
"b.t1建立索引不管用,因为是时间字段。"
建议你再去学学数据库的基础
tiaodongdeyinfu 2007-09-05
  • 打赏
  • 举报
回复
错了,是:
select Select a.k1,a.k2,x.d1 from a
left join b as x on a.k1=x.k1 and a.k2=x.k2
where x.t1 = (select max(t1) from b)
tiaodongdeyinfu 2007-09-05
  • 打赏
  • 举报
回复
楼主只是说最靠后,但是不知道有多少条是吧?如果是这样,在表b里面肯定有个时间最大值吧?这样不就能取出最靠后的部门了吗?
select Select a.k1,a.k2,x.d1 from a
left join b as x on a.k1=x.k1 and a.k2=x.k2
where b.t1 = (select max(t1) from b)
这样就行了。
shanhqk 2007-09-02
  • 打赏
  • 举报
回复
1、b.t1建立索引不管用,因为是时间字段。
2、如果这个表是自己设计的,可以把该字段设置为浮点,然后再建立索引,这样所建立的索引是惯用,可以使用排序的方法。
3、既然:表b里面有多条记录,里面有时间字段t1,和部门字段d1,那么为什么还需要主表a呢,我不是很明白。
shan1119 2007-08-31
  • 打赏
  • 举报
回复
刚看了回复,还是赞同 79bo(山芋) 的.
shan1119 2007-08-31
  • 打赏
  • 举报
回复
select * from (select a.k1,a.k2,b.d1 from a
left join b on a.k1=b.k1 and a.k2=b.k2 order by b.t1 desc) where rownum=1;
ksrs 2007-08-31
  • 打赏
  • 举报
回复
select a.*,b.*
from a,b
where d1 =
( select max(d1)
from
(
select a.k1,a.k2,b.d1 from a
left join b on a.k1=b.k1 and a.k2=b.k2
)
)
and a,k1 = b.k1 and a.k2 = b.k2;
临摹 2007-08-30
  • 打赏
  • 举报
回复
我以为最靠后的只有一个呢.
要不
select a.k1,a.k2,b.d1 from a
left join b on a.k1=b.k1 and a.k2=b.k2
where b.t1=(select max(t1) from b)
WangZWang 2007-08-30
  • 打赏
  • 举报
回复
Select a.k1,a.k2,x.d1 from a
Inner join b as x on a.k1=x.k1 and a.k2=x.k2
Where not exists(Select * from b Where d1=x.d1 and t1>x.t1)
coffeedou 2007-08-30
  • 打赏
  • 举报
回复
79bo(山芋) ( ) 信誉:100

你这样只能查出一条吧?

WangZWang(先来) ( ) 信誉:100

试了,好象不行
WangZWang 2007-08-30
  • 打赏
  • 举报
回复
Select a.k1,a.k2,x.d1 from a
left join b as x on a.k1=x.k1 and a.k2=x.k2
Where not exists(Select * from b Where d1=x.d1 and t1>x.t1)
临摹 2007-08-30
  • 打赏
  • 举报
回复
修改下你写的:
select k1,k2,d1 from(
select a.k1,a.k2,b.d1 from a
left join b on a.k1=b.k1 and a.k2=b.k2 order by b.t1 desc)
where rownum=1
bjt_ 2007-08-30
  • 打赏
  • 举报
回复
select a.k1,a.k2,b.d1,b.t1 from a, b
where a.k1=b.k1(+) and a.k2=b.k2(+) and b.t1=(select max(t1) from b)

b.t1要建索引

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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