MySQL获取所有分类的前N条记录


Posted in MySQL onMay 07, 2021

比如有文章表 Article(Id,Category,InsertDate),现在要用SQL找出每种类型中时间最新的前N个数据组成的集合,一段不错的代码,留存备用

SELECT A1.* 
FROM Article AS A1 
   INNER JOIN (SELECT A.Category,A.InsertDate 
         FROM Article AS A 
           LEFT JOIN Article AS B 
            ON A.Category = B.Category 
              AND A.InsertDate <= B.InsertDate 
         GROUP BY A.Category,A.InsertDate 
         HAVING COUNT(B.InsertDate) <= @N 
  ) AS B1 
  ON A1.Category = B1.Category 
    AND A1.InsertDate = B1.InsertDate 
ORDER BY A1.Category,A1.InsertDate DESC

@N 就是你要取多少条

下面是我用到了一个产品分类表中,superId是大分类,prcid是产品分类。能用SQL完成的功能就要尽量用SQL语句来完成,这既简洁又高效。

SELECT
  A1.*
FROM
  prcKx AS A1
INNER JOIN (
  SELECT
    A.superId,
    A.prcid
  FROM
    prcKx AS A
  LEFT JOIN prcKx AS B ON A.superId = B.superId
  AND A.prcid <= B.prcid
  GROUP BY
    A.superId,
    A.prcid
  HAVING
    COUNT(B.prcid) <= 7
) AS B1 ON A1.superId = B1.superId
AND A1.prcid = B1.prcid
ORDER BY
  superId,
  prcid

需求是这样的(CSDN上的一个问题):mysql中有个表:article(字段:id,type,date),type有1-10,10种类型。现在要用SQL找出每种类型中时间最新的前N个数据组成的集合。

这个问题应该有很多方法可以实现,下面就来说说在网上看到的一位高手的实现(用一条SQL语句实现的,个人感觉非常好,所以拿来和大家分享): 

select a1.* from article a1
inner join
(select a.type,a.date from article a left join article b
on a.type=b.type and a.date<=b.date 
group by a.type,a.date
having count(b.date)<=2
)b1
on a1.type=b1.type and a1.date=b1.date
order by a1.type,a1.date desc

注:上面sql语句中的2代表的就是前面提到的N。

以上所述就是本文的全部内容了,希望大家能够喜欢。

MySQL 相关文章推荐
52条SQL语句教你性能优化
May 25 MySQL
MySQL 外键约束和表关系相关总结
Jun 20 MySQL
MySQL中存储时间的最佳实践指南
Jul 01 MySQL
MySQL七种JOIN类型小结
Oct 24 MySQL
mysql事务对效率的影响分析总结
Oct 24 MySQL
SQL 聚合、分组和排序
Nov 11 MySQL
MySQL常见优化方案汇总
Jan 18 MySQL
MySQL磁盘碎片整理实例演示
Apr 03 MySQL
MySQL创建管理LIST分区
Apr 13 MySQL
聊聊mysql都有哪几种分区方式
Apr 13 MySQL
MySQL数据库 安全管理
May 06 MySQL
mysql查看表结构的三种方法总结
Jul 07 MySQL
教你解决往mysql数据库中存入汉字报错的方法
MySQL时间设置注意事项的深入总结
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 #MySQL
MySQL创建高性能索引的全步骤
将图片保存到mysql数据库并展示在前端页面的实现代码
MySQL的join buffer原理
Apr 29 #MySQL
Mysql服务添加 iptables防火墙策略的方案
Apr 29 #MySQL
You might like
PHP 简单数组排序实现代码
2009/08/05 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
2013/11/13 PHP
PHP中鲜为人知的10个函数
2014/02/28 PHP
访问编码后的中文URL返回404错误的解决方法
2014/08/20 PHP
php获取当前页面完整URL地址
2015/12/30 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
javascript js cookie的存储,获取和删除
2007/12/29 Javascript
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
2011/10/31 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
JavaScript学习笔记之定时器
2015/01/22 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
JavaScript中日期函数的相关操作知识
2016/08/03 Javascript
Backbone中View之间传值的学习心得
2016/08/09 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
2016/11/23 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
React Native验证码倒计时工具类分享
2017/10/24 Javascript
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
vue 解决循环引用组件报错的问题
2018/09/06 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
python 通过xml获取测试节点和属性的实例
2018/03/31 Python
基于Django与ajax之间的json传输方法
2018/05/29 Python
浅谈python中对于json写入txt文件的编码问题
2018/06/07 Python
Python OpenCV中的resize()函数的使用
2019/06/20 Python
Django之PopUp的具体实现方法
2019/08/31 Python
执行Python程序时模块报错问题
2020/03/26 Python
python map比for循环快在哪
2020/09/21 Python
EMPHASIS艾斐诗官网:周生生旗下原创精品珠宝品牌
2020/12/17 全球购物
精伦电子Java笔试题
2013/01/16 面试题
餐饮部总监岗位职责范文
2014/02/13 职场文书
法学院毕业生求职信
2014/06/25 职场文书
学校门卫岗位职责范本
2014/06/30 职场文书
超市员工辞职信范文
2015/05/12 职场文书
消防宣传标语大全
2015/08/03 职场文书
CSS3实现的文字弹出特效
2021/04/16 HTML / CSS
nginx代理实现静态资源访问的示例代码
2022/07/07 Servers