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 相关文章推荐
MySQL sql_mode的使用详解
May 08 MySQL
Mysql中存储引擎的区别及比较
Jun 04 MySQL
面试被问select......for update会锁表还是锁行
Nov 11 MySQL
mysql中DCL常用的用户和权限控制
Mar 31 MySQL
MySQL创建管理LIST分区
Apr 13 MySQL
MySQL创建管理HASH分区
Apr 13 MySQL
MySQL三种方式实现递归查询
Apr 18 MySQL
Mysql 文件配置解析介绍
May 06 MySQL
分享很少见很有用的SQL功能CORRESPONDING
Aug 05 MySQL
MySQL 原理与优化之Update 优化
Aug 14 MySQL
MySQL常用慢查询分析工具详解
Aug 14 MySQL
MySQL使用IF语句及用case语句对条件并结果进行判断 
Sep 23 MySQL
教你解决往mysql数据库中存入汉字报错的方法
MySQL时间设置注意事项的深入总结
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 #MySQL
MySQL创建高性能索引的全步骤
将图片保存到mysql数据库并展示在前端页面的实现代码
MySQL的join buffer原理
Apr 29 #MySQL
Mysql服务添加 iptables防火墙策略的方案
Apr 29 #MySQL
You might like
一个php生成16位随机数的代码(两种方法)
2014/09/16 PHP
php中实现记住密码下次自动登录的例子
2014/11/06 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
jQuery验证元素是否为空的两种常用方法
2015/03/17 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
jquery验证邮箱格式是否正确实例讲解
2015/11/16 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
vue递归获取父元素的元素实例
2020/08/07 Javascript
详解python3百度指数抓取实例
2016/12/12 Python
python3实现windows下同名进程监控
2018/06/21 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
HTML5移动开发图片压缩上传功能
2016/11/09 HTML / CSS
科颜氏美国官网:Kiehl’s美国
2017/01/31 全球购物
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
C# Debug和Testing相关面试题
2015/10/25 面试题
安全检查管理制度
2014/02/02 职场文书
小学教师寄语大全
2014/04/03 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
八项规定个人对照检查材料思想汇报
2014/09/25 职场文书
丽江古城导游词
2015/02/03 职场文书
岗位聘任报告
2015/03/02 职场文书
2015年安全生产月工作总结
2015/07/27 职场文书
婚宴父亲致辞
2015/07/27 职场文书
MYSQL数据库使用UTF-8中文编码乱码的解决办法
2021/05/26 MySQL
MySQL中InnoDB存储引擎的锁的基本使用教程
2021/05/26 MySQL
mysqldump进行数据备份详解
2022/07/15 MySQL