求SQL语句

c87580506 2011-07-14 09:38:11
表X 有列A,B.......
A是主键,B时间列,比如
a b1
a b2
c d
....

我需要 取出最近时间(b)的信息

即获取到
a b1
c d

求高手帮助

...全文
119 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
txljerry 2011-07-26
  • 打赏
  • 举报
回复
都是高手啊。
sh65489 2011-07-21
  • 打赏
  • 举报
回复
SELECT A ,MIN(B) FROM TAB
GROUP BY A
不要悲剧人生 2011-07-14
  • 打赏
  • 举报
回复
楼主说的BI,和B2哪个大,是要取最近的时间,那就应该是最大的, 应该用MAX吧, 让人误解用起MIN呢。。
c87580506 2011-07-14
  • 打赏
  • 举报
回复
谢谢各位大哥啊
horizonlyhw 2011-07-14
  • 打赏
  • 举报
回复

with table_name as(
select 1 a ,sysdate b from dual union all
select 1 a ,sysdate-1 b from dual union all
select 1 a ,sysdate-1 b from dual union all
select 2 a ,sysdate b from dual union all
select 2 a ,sysdate b from dual)

select t.a,min(t.b)
from table_name t
group by t.a
tangren 2011-07-14
  • 打赏
  • 举报
回复
--方法1 (NOT EXISTS)
SELECT *
FROM x a
WHERE NOT EXISTS (SELECT *
FROM x b
WHERE b.a = a.a
AND b.b > a.b);

--方法2 (ALL)
SELECT * FROM x a WHERE a.b >= ALL (SELECT b.b FROM x b WHERE b.a = a.a);

--方法3 (IN)
SELECT *
FROM x a
WHERE (a.a, a.b) IN (SELECT b.a, MAX(b.b) FROM x b GROUP BY b.a);

--方法4 (IN)
SELECT *
FROM x a
WHERE (a.a, a.b) IN (SELECT MAX(b.a), MAX(b.b) FROM x b WHERE b.a = a.a);

--方法5 (ROW_NUMBER)
SELECT *
FROM (SELECT a.*, row_number() over(PARTITION BY a.a ORDER BY a.b DESC) rn
FROM x a)
WHERE rn = 1;

--方法6 (EXISTS)
SELECT *
FROM x a
WHERE EXISTS
(SELECT 1 FROM x b GROUP BY b.a HAVING b.a = a.a AND MAX(b.b) = a.b);

--方法7 (EXISTS)
SELECT *
FROM x a
WHERE EXISTS
(SELECT 1 FROM x b WHERE b.a = a.a GROUP BY b.a HAVING MAX(b.b) = a.b);
BenChiM888 2011-07-14
  • 打赏
  • 举报
回复

[SYS@orcl] SQL>with table_name as(
2 select 1 a ,sysdate b from dual union all
3 select 1 a ,sysdate-1 b from dual union all
4 select 1 a ,sysdate-1 b from dual union all
5 select 2 a ,sysdate b from dual union all
6 select 2 a ,sysdate b from dual)
7 select A,min(B)keep(dense_rank first order by B) as B
8 from table_name
9 group by A;

A B
---------- ----------
1 2011-07-13
2 2011-07-14

BenChiM888 2011-07-14
  • 打赏
  • 举报
回复


select A,min(B)keep(dense_rank first order by B) as B
from table_name
group by A;

c87580506 2011-07-14
  • 打赏
  • 举报
回复
b可能重复,重复的取一条即可
c87580506 2011-07-14
  • 打赏
  • 举报
回复
自己先顶

17,134

社区成员

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

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