有一张表A 数据如下:
ID 列1 列2 列3
AA B1 C1 200
AA B1 C2 200
AA B2 C2 100
BB B1 C1 200
BB B2 C1 100
CC B1 C1 200
CC B1 C2 300
CC B1 C3 200
DD B1 C1 100要求:返回结果为 同一个“ID” “列3”值最大的那条记录,返回整行,同时仅返回单条
(仅“列3”最大的那1条,如果多条“列3”都一样最大,则返回第1条)。如是上述表则返回
ID 列1 列2 列3
AA B1 C1 200
BB B1 C1 200
CC B1 C2 300
DD B1 C1 100
ID 列1 列2 列3
AA B1 C1 200
AA B1 C2 200
AA B2 C2 100
BB B1 C1 200
BB B2 C1 100
CC B1 C1 200
CC B1 C2 300
CC B1 C3 200
DD B1 C1 100要求:返回结果为 同一个“ID” “列3”值最大的那条记录,返回整行,同时仅返回单条
(仅“列3”最大的那1条,如果多条“列3”都一样最大,则返回第1条)。如是上述表则返回
ID 列1 列2 列3
AA B1 C1 200
BB B1 C1 200
CC B1 C2 300
DD B1 C1 100
解决方案 »
- 请教高手plsql_memory.show_memory_usage怎么用啊
- --悲哀:按书上写了个存储过程,不知道咋调用--
- 关于ODBC 连接oracle 的问题
- oracle表中有DATE字段 plsql insert如何写,现在的情况报错
- 特紧急一个问题,恢复UPDATE数据。
- oracle学生管理系统
- Oracle sequence怎么生成的?》
- 请教一个难题,高分致谢!有关Trigger || 存储过程的
- 数据库shutDown以后,不能以INTERNAL用户登陆
- SQL存储过程移植到ORACLE,各位SQL、ORACLE高手帮帮忙呀
- oracle中,如何实现:将一个数据库的一张表复制到另外的一个数据库
- 一个很迷惑的小问题
from(
select a.* ,rownum() over (partition by id order by 列3 desc) rn
from a)
where aa.rn=1
(select min(rownum) from a where id=
(select distinct id from a where 列3 in
(select max(列3) from a group by id)
) group by id
)
BB.B,
BB.C,
BB.D,
bb.rn
from(
select AA.* ,row_number() over(partition by A order by D desc) rn
from table_a AA ) BB
where BB.rn=1
INSERT INTO my_tst_a VALUES ('AA','B1','C2',200);
INSERT INTO my_tst_a VALUES ('AA','B2','C2',100);
INSERT INTO my_tst_a VALUES ('BB','B1','C1',200);
INSERT INTO my_tst_a VALUES ('BB','B2','C1',100);
INSERT INTO my_tst_a VALUES ('CC','B1','C1',200);
INSERT INTO my_tst_a VALUES ('CC','B1','C2',300);
INSERT INTO my_tst_a VALUES ('CC','B1','C3',200);
INSERT INTO my_tst_a VALUES ('DD','B1','C1',100);select * from my_tst_a t;
------------------------------
TSD_ID ONE TWO THREE
1 AA B1 C1 200
2 AA B1 C2 200
3 AA B2 C2 100
4 BB B1 C1 200
5 BB B2 C1 100
6 CC B1 C1 200
7 CC B1 C2 300
8 CC B1 C3 200
9 DD B1 C1 100SELECT t.*
FROM (SELECT dense_rank() over(PARTITION BY tsd_id ORDER BY three desc) rk,
row_number() over(PARTITION BY tsd_id ORDER BY three desc) rn,
t.*
FROM my_tst_a t) t
WHERE rk = rn
AND rk = 1---------------------------- RK RN TSD_ID ONE TWO THREE
1 1 1 AA B1 C1 200
2 1 1 BB B1 C1 200
3 1 1 CC B1 C2 300
4 1 1 DD B1 C1 100
7楼的,有多个3相同,会除多条的
你完整的是
select * from table
where (id,字段3)in (select id,max(字段3) form table group by id)
或者
select * from table t1,(select id,max(字段3) as max form table group by id) t2
where t1.id=t2.di and t1.字段3=t2.max
个人觉得row_number() over 较好