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 infobright的安装步骤
Apr 07 MySQL
MySQL 百万级数据的4种查询优化方式
Jun 07 MySQL
mysql中between的边界,范围说明
Jun 08 MySQL
mysql如何配置白名单访问
Jun 30 MySQL
MySQL系列之四 SQL语法
Jul 02 MySQL
MySQL索引是啥?不懂就问
Jul 21 MySQL
MySQL 如何限制一张表的记录数
Sep 14 MySQL
MySQL基础快速入门知识总结(附思维导图)
Sep 25 MySQL
MySQL中datetime时间字段的四舍五入操作
Oct 05 MySQL
MySQL的InnoDB存储引擎的数据页结构详解
Mar 03 MySQL
Mysql中@和@@符号的详细使用指南
Jun 05 MySQL
MySQL范围查询优化的场景实例详解
Jun 10 MySQL
教你解决往mysql数据库中存入汉字报错的方法
MySQL时间设置注意事项的深入总结
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 #MySQL
MySQL创建高性能索引的全步骤
将图片保存到mysql数据库并展示在前端页面的实现代码
MySQL的join buffer原理
Apr 29 #MySQL
Mysql服务添加 iptables防火墙策略的方案
Apr 29 #MySQL
You might like
收音机另类DIY - 纸巾盒做外壳
2021/03/02 无线电
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
php使用PDO操作MySQL数据库实例
2014/12/30 PHP
PHP房贷计算器实例代码,等额本息,等额本金
2017/04/01 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
jquery异步请求实例代码
2011/06/21 Javascript
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
2013/04/24 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
JavaScript代码生成PDF文件的方法
2016/02/26 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
jQuery选择器之子元素选择器详解
2017/09/18 jQuery
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
React优化子组件render的使用
2019/05/12 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
Cython编译python为so 代码加密示例
2019/12/23 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
关于python scrapy中添加cookie踩坑记录
2020/11/17 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
css3 border旋转时的动画应用
2016/01/22 HTML / CSS
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
仓管员岗位职责范文
2013/11/08 职场文书
中学校庆方案
2014/03/17 职场文书
初中班主任经验交流材料
2014/05/16 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
golang使用map实现去除重复数组
2022/04/14 Golang
python解析json数据
2022/04/29 Python