有一个日志表(sys_log) 有时间(log_time)和类型(log_type)字段,其他字段忽略
我想选出 每种类型的前3条数据不知道有什么好的SQL写法没有 (Oracle数据库)下面是我的写法,SQL嵌套的比较多:1.先排序生成按 log_type,log_time 排序的结果集
2.让结果集生成行号
3.选择每种类型的最小行号
4.选择每种类型行号在最小行号和最小行号+2之间的记录select t.*
from (select t.*, rownum rn
from (select sys_log.*
from sys_log
order by log_type, log_time desc) t) t,
(select min(rn) rn, log_type
from (select t.*, rownum rn
from (select sys_log.*
from sys_log
order by log_type, log_time desc) t)
group by log_type) t2
where t.log_type = t2.log_type
and t.rn between t2.rn and t2.rn + 2;
我想选出 每种类型的前3条数据不知道有什么好的SQL写法没有 (Oracle数据库)下面是我的写法,SQL嵌套的比较多:1.先排序生成按 log_type,log_time 排序的结果集
2.让结果集生成行号
3.选择每种类型的最小行号
4.选择每种类型行号在最小行号和最小行号+2之间的记录select t.*
from (select t.*, rownum rn
from (select sys_log.*
from sys_log
order by log_type, log_time desc) t) t,
(select min(rn) rn, log_type
from (select t.*, rownum rn
from (select sys_log.*
from sys_log
order by log_type, log_time desc) t)
group by log_type) t2
where t.log_type = t2.log_type
and t.rn between t2.rn and t2.rn + 2;
解决方案 »
- ORACLE安装错误
- ORACLE远程服务器的问题!紧急求救!(在线等待!)
- hibernate向oracle中插入中文即报错 期待高人指点
- Oracle数据库三级结构的实现
- Oracle错误提示:VTK-1000:无法连接到Management Server yl。请验证您已输入Oracle Management Server 的正确主机名和状态。在线等待!
- 关于ORACLE 和.NET 2002的问题
- sql连接操作,很疑惑
- 怎样用一个表的结构建一个新的表
- 请问:oracle8i中字符集和国家字符集有什么区别
- 怎么样实现根据数据库的系统时钟来触发?
- 联合主键,求最近发生的一条transaction 的记录,求解,谢谢!
- 存储过程用leftseat,rightseat不能update
select sys_log.*,
row_number()over(partition by log_type order by log_time desc)rn
from sys_log)
where rn<=3
Oracle中rownum <= N
DB2中可以用percent
select sys_log.*,
row_number()over(partition by log_type order by log_time desc)rn
from sys_log)
where rn <=3
只不过可能会非常麻烦
如果不是特别必要的话就是用系统提供的函数吧
学习