选择每个分组的前几条数据
有一个日志表(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;