表 A 中3个栏位
e_name 机器名字
st 机器状态 Y,N
times 机器切换状态的时间E_NAME ST TIMES
A1 Y 2009-11-11 11:11:11
A1 Y 2009-11-12 11:11:11
A1 Y 2009-11-13 11:11:11
A1 Y 2009-11-14 11:11:11
A2 Y 2009-11-15 11:11:11
A2 Y 2009-11-01 11:11:11
A2 Y 2009-11-12 11:11:11
A2 Y 2009-11-09 11:11:11
希望得到每个机器最近的3笔资料。
不要用一下写法
select e_name,st ,times from(select * from a order by times desc) where rownum<4
表数据很数千万条。
e_name 机器名字
st 机器状态 Y,N
times 机器切换状态的时间E_NAME ST TIMES
A1 Y 2009-11-11 11:11:11
A1 Y 2009-11-12 11:11:11
A1 Y 2009-11-13 11:11:11
A1 Y 2009-11-14 11:11:11
A2 Y 2009-11-15 11:11:11
A2 Y 2009-11-01 11:11:11
A2 Y 2009-11-12 11:11:11
A2 Y 2009-11-09 11:11:11
希望得到每个机器最近的3笔资料。
不要用一下写法
select e_name,st ,times from(select * from a order by times desc) where rownum<4
表数据很数千万条。
解决方案 »
- linux中oracle手工创建数据库出错,ORA-00604: error occurred at recursive SQL level !alert如下!
- oracle 表数据合并
- 在cmd中怎样导入dmp文件
- suse - oracle OEM 乱码解决(转载)
- 急问 UPDATE语句 不更新?
- 请问linux下oracle有没有向windows那样图形化的管理工具啊?
- 这个触发器要怎么写?
- 一个简单的sql语句,帮忙
- ¤¤¤¤¤ VC中通过ODBC操作Oracle中的BLOB字段,该怎么办?
- 安装Oracle 8i (Release 3 (8.1.7) ) 的问题
- 打开数据库时候报错
- oracle for AIX安装报错
from (select e_name,row_number()over (patition by e_name order by times desc as rn
from table_name)
where rn<4
试试,看效率会好点不
---------- ---------- ---------------
A1 Y 21-DEC-09
A1 Y 20-DEC-09
A1 Y 19-DEC-09
A1 Y 18-DEC-09
A2 Y 17-DEC-09
A2 Y 16-DEC-09
A2 Y 15-DEC-09
A2 Y 14-DEC-098 rows selected.
SQL> select e_name,st,times from
2 (
3 select a.*,
4 row_number() over(partition by e_name order by times desc) rn
5 from a
6 )
7 where rn<4;E_NAME ST TIMES
---------- ---------- ---------------
A1 Y 21-DEC-09
A1 Y 20-DEC-09
A1 Y 19-DEC-09
A2 Y 17-DEC-09
A2 Y 16-DEC-09
A2 Y 15-DEC-096 rows selected.
楼主给出的那个sql好像不太准确
并不能完成你的要求