oracle中选择时间最大的记录
idcontextdateA12011-6-1A22011-6-2A32011-6-3B12011-6-1B22011-6-2B32011-6-3我想要的结果是A3201...
id context date
A 1 2011-6-1
A 2 2011-6-2
A 3 2011-6-3
B 1 2011-6-1
B 2 2011-6-2
B 3 2011-6-3
我想要的结果是
A 3 2011-6-3
B 3 2011-6-3 展开
A 1 2011-6-1
A 2 2011-6-2
A 3 2011-6-3
B 1 2011-6-1
B 2 2011-6-2
B 3 2011-6-3
我想要的结果是
A 3 2011-6-3
B 3 2011-6-3 展开
展开全部
两种方式,第一种使用IN,在IN里面使用子查询查出最大日期,然后再把表的日期和查出的最大日期做等于。
SELECT * FROM TABLE WHERE TRUNC(DATE) = (select max(trunc(date)) from table)
第二种可以使用NOT EXISTS,选择最大日期,那么就是不存在比自身日期大的数据
SELECT * FROM TABLE T
WHERE NOT EXISTS (SELECT 1 FROM TABLE T1 WHERE TRUNC(T1.DATE) > TRUNC(T.DATE))
二者相比,EXISTS的效率显然更高,因为IN语句需要执行一个全表的扫描。而EXISTS这样的语法,返回值是TRUE或FALSE,遇到第一个符合条件的行就会跳出检索。
SELECT * FROM TABLE WHERE TRUNC(DATE) = (select max(trunc(date)) from table)
第二种可以使用NOT EXISTS,选择最大日期,那么就是不存在比自身日期大的数据
SELECT * FROM TABLE T
WHERE NOT EXISTS (SELECT 1 FROM TABLE T1 WHERE TRUNC(T1.DATE) > TRUNC(T.DATE))
二者相比,EXISTS的效率显然更高,因为IN语句需要执行一个全表的扫描。而EXISTS这样的语法,返回值是TRUE或FALSE,遇到第一个符合条件的行就会跳出检索。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select *
from tab t
where not exists(select 1 from tab id = t.id and date > t.date)
最高效。。。。
from tab t
where not exists(select 1 from tab id = t.id and date > t.date)
最高效。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select id,context,date from (
select t.*,row_number() over(partition by id order by date desc) as num from table t) where num=1
select t.*,row_number() over(partition by id order by date desc) as num from table t) where num=1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SQL语句如下:
SELECT * FROM 表名
WHERE date IN (SELECT MAX(DATE) FROM 表名)
SELECT * FROM 表名
WHERE date IN (SELECT MAX(DATE) FROM 表名)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询