SQL获取每个分类中,最新的10条数据

6 篇文章 0 订阅
6 篇文章 0 订阅

如果是每个分类取最新一条是比较简单的,用max配合group就可以搞定;

SQL:获取每个用户最新的一条数据记录_王世洪的博客-CSDN博客_sql取最新的一条数据

但是,如果是取N条的话,不同数据库的做法不一样。

Oracel和MSsql可以用自带函数如row_number()、rowid可以解决,比较方便,如下:

select * from (
select *,row_number() over(PARTITION by c_prov order by c_publish_date) as rowid 
from spiderdata_virus_prov_status
) a where rowid<=10

在Mysql中,没有这么便利的函数,查询了网上别人的处理方式,也测试了但是没有一个成功(可能我菜,试了好几种都没成功,等试成功再更新出来),所以自己就用了一般思路:生成序号的方式,获取10条数据;

(鉴于Mysql也没有with的用法,所以写起来有点废话,亲测:十万级别效率1s-2s,百万级别效率10s吧)

select  s_full.* from 
(
select (@s:=@s+1) as s_noid,virus.* from  spiderdata_virus_prov_status virus,(select @s:=0) s_table 
order by c_prov,c_publish_date
) s_full
inner join 
(
-- 按日期降序并获取最大的序号
select max(i_noid) i_noid,c_prov from (
select (@i:=@i+1) as i_noid,virus.* from  spiderdata_virus_prov_status virus,(select @i:=0) i_table 
order by c_prov,c_publish_date
) source 
group by c_prov)  i_full
on s_full.c_prov=i_full.c_prov
-- 取10条,可以自定义
and s_full.s_noid>i_full.i_noid-10
order by s_full.c_prov,s_full.c_publish_date desc

通过如上,就可以完成Oracle、MSsql、Mysql中,实现每个分类下取N条(最新)数据的功能。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值