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 Show Profile
Apr 05 MySQL
MySQL infobright的安装步骤
Apr 07 MySQL
MySQL 可扩展设计的基本原则
May 14 MySQL
MySQL时间盲注的五种延时方法实现
May 18 MySQL
为什么代码规范要求SQL语句不要过多的join
Jun 23 MySQL
MySQL修炼之联结与集合浅析
Oct 05 MySQL
mysql5.6主从搭建以及不同步问题详解
Dec 04 MySQL
MySQL 开窗函数
Feb 15 MySQL
MySQL优化常用的19种有效方法(推荐!)
Mar 17 MySQL
MySQL学习必备条件查询数据
Mar 25 MySQL
MySQL 数据 data 基本操作
May 04 MySQL
MySQL中order by的执行过程
Jun 05 MySQL
教你解决往mysql数据库中存入汉字报错的方法
MySQL时间设置注意事项的深入总结
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 #MySQL
MySQL创建高性能索引的全步骤
将图片保存到mysql数据库并展示在前端页面的实现代码
MySQL的join buffer原理
Apr 29 #MySQL
Mysql服务添加 iptables防火墙策略的方案
Apr 29 #MySQL
You might like
PHP图片上传代码
2013/11/04 PHP
PHP实现获取中英文首字母
2015/06/19 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
深入理解JavaScript系列(4) 立即调用的函数表达式
2012/01/15 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
Node.js中HTTP模块与事件模块详解
2014/11/14 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
浅析2种JavaScript继承方式
2015/12/04 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
Angular实现跨域(搜索框的下拉列表)
2017/02/16 Javascript
vue打包后显示空白正确处理方法
2017/11/01 Javascript
nodejs async异步常用函数总结(推荐)
2017/11/17 NodeJs
javascript的delete运算符知识点总结
2019/11/19 Javascript
微信小程序报错: thirdScriptError的错误问题
2020/06/19 Javascript
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python抓取某汽车网数据解析html存入excel示例
2013/12/04 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
Python实现读写INI配置文件的方法示例
2018/06/09 Python
Django框架首页和登录页分离操作示例
2019/05/28 Python
python中调试或排错的五种方法示例
2019/09/12 Python
python实现拼图小游戏
2020/02/22 Python
python爬虫开发之selenium模块详细使用方法与实例全解
2020/03/09 Python
Python如何输出警告信息
2020/07/30 Python
Python自动化测试中yaml文件读取操作
2020/08/20 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
html5中如何将图片的绝对路径转换成文件对象
2018/01/11 HTML / CSS
墨西哥运动服饰和鞋网上商店:Netshoes墨西哥
2016/07/28 全球购物
亿阳信通股份有限公司笔试题(C#)
2016/03/04 面试题
小班评语大全
2014/05/04 职场文书
房屋租赁协议书
2014/10/18 职场文书
2014年车间主任工作总结
2014/12/10 职场文书
教务处教学工作总结
2015/08/10 职场文书
2019年个人工作总结范文
2019/03/25 职场文书
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript
Pandas 数据编码的十种方法
2022/04/20 Python