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查询语句
May 26 MySQL
mysql 带多个条件的查询方式
Jun 05 MySQL
解决mysql的int型主键自增问题
Jul 15 MySQL
MySQL修炼之联结与集合浅析
Oct 05 MySQL
教你如何让spark sql写mysql的时候支持update操作
Feb 15 MySQL
MySQL 分区表中分区键为什么必须是主键的一部分
Mar 17 MySQL
一文了解MYSQL三大范式和表约束
Apr 03 MySQL
mysql字段为NULL索引是否会失效实例详解
May 30 MySQL
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
Jun 14 MySQL
SQL语句中EXISTS的详细用法大全
Jun 25 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/10/30 PHP
浅谈php(codeigniter)安全性注意事项
2017/04/06 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
Javascript模块模式分析
2008/05/16 Javascript
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
chrome原生方法之数组
2011/11/30 Javascript
利用浏览器全屏api实现js全屏
2014/01/16 Javascript
jquery each的几种常用的使用方法示例
2014/01/21 Javascript
浅谈javascript回调函数
2014/12/07 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
通过伪协议解决父页面与iframe页面通信的问题
2015/04/05 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
js实现将选中内容分享到新浪或腾讯微博
2015/12/16 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
2016/06/28 Javascript
JS打印组合功能
2016/08/04 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
vue  directive定义全局和局部指令及指令简写
2018/11/20 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
python通过floor函数舍弃小数位的方法
2015/03/17 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
Python  Django 母版和继承解析
2019/08/09 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
2020/03/02 Python
django处理select下拉表单实例(从model到前端到post到form)
2020/03/13 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
Python configparser模块封装及构造配置文件
2020/08/07 Python
html5 datalist 选中option选项后的触发事件
2020/03/05 HTML / CSS
英国珠宝和手表专家:Pleasance & Harper
2020/10/21 全球购物
领导干部廉政自律承诺书
2014/05/26 职场文书
学位证书委托书
2014/09/30 职场文书
好人好事新闻稿
2015/07/17 职场文书
2016党员学习心得体会范文
2016/01/23 职场文书