选择每个分组的前几条数据

ghostzitee ghostzitee 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
有一个日志表(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;
...全文

相关推荐

评论 10
收藏 已收藏
分享
返回顶部
ghostzitee
Oracle 17,133 成员 55,258 内容