表结构:
SQL> desc m1
Name Type Nullable Default Comments
------ ------------ -------- ------- --------
STATUS VARCHAR2(3) Y
QTY NUMBER(20,5) Y
DAT VARCHAR2(12) Y
表数据(测试用):
SQL> SELECT * FROM M1;
STATUS QTY DAT
------ ---------------------- ------------
AAA 1.00000 20081208
AAA 1.00000 20081209
AAA 1.00000 20071209
BBB 1.00000 20070909
BBB 1.00000 20080909
SQL>
现在的需求是查询出STATUS为最小的,DAT为最大的那条记录
最终结果:
STATUS QTY DAT
------ ---------------------- ------------
AAA 1.00000 20081209
我的实现方法:
SELECT STATUS,QTY,DAT FROM (
SELECT DISTINCT STATUS,QTY,MAX(DAT)OVER(PARTITION BY STATUS,QTY) DAT FROM M1)
WHERE STATUS = (
SELECT MIN(STATUS) FROM (
SELECT DISTINCT STATUS,QTY,MAX(DAT)OVER(PARTITION BY STATUS,QTY) DAT FROM M1))
但是,由于表的数据量很大,我想请问除此之外有没有效能高点的查询方法
谢谢!
------解决方案--------------------
select STATUS,QTY,DAT FROM
select STATUS,QTY,DAT,rank () over (oder by status asc,dat desc) rk from m1)
where rk=1;