表结构:
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 20080909SQL>现在的需求是查询出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))但是,由于表的数据量很大,我想请问除此之外有没有效能高点的查询方法
谢谢!
解决方案 »
- 为什么我system登录pl/sql developer,执行show user总是显示用户为sys呢
- oracle11 64位 安装成功后无法使用plsql 怎么解决
- oraclemtsrecoveryservice注册表imagepath键值是多少
- 如何select被锁定记录
- 请教大家递归的另类应用..
- 一个SqlServer的语句,转换为ORACLE
- PL/SQL过程中中嵌入HTML,为什么创建成功,却看不到页面?
- 在用schema manager建表时,怎么样设定主键为自动升序?
- oracle 11g sql developer 导入excel文件报12899
- ORACLE有没有根本解决高水位的方法
- 一个oracle问题
- sql语句练习
select STATUS,QTY,DAT FROM
select STATUS,QTY,DAT,rank () over (oder by status asc,dat desc) rk from m1)
where rk=1;
(select STATUS,QTY,DAT,rank () over (oder by status asc,dat desc) rk from m1)
where rk=1;少了一(