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创建索引需要了解的
Apr 08 MySQL
详解MySQL事务的隔离级别与MVCC
Apr 22 MySQL
详解MySQL 联合查询优化机制
May 10 MySQL
MySQL系列之十三 MySQL的复制
Jul 02 MySQL
SQL实现LeetCode(178.分数排行)
Aug 04 MySQL
Mysql中有关Datetime和Timestamp的使用总结
Dec 06 MySQL
mysql的单列多值存储实例详解
Apr 05 MySQL
MySQL数据库如何使用Shell进行连接
Apr 12 MySQL
MySql分区类型及创建分区的方法
Apr 13 MySQL
SQL语句多表联合查询的方法示例
Apr 18 MySQL
sql查询语句之平均分、最高最低分及排序语句
May 30 MySQL
MySQL深分页问题解决思路
Dec 24 MySQL
教你解决往mysql数据库中存入汉字报错的方法
MySQL时间设置注意事项的深入总结
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 #MySQL
MySQL创建高性能索引的全步骤
将图片保存到mysql数据库并展示在前端页面的实现代码
MySQL的join buffer原理
Apr 29 #MySQL
Mysql服务添加 iptables防火墙策略的方案
Apr 29 #MySQL
You might like
国内php原创论坛
2006/10/09 PHP
php高级编程-函数-郑阿奇
2011/07/04 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
2017/11/07 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
网站上面有这种切换效果
2006/06/26 Javascript
JavaScript的public、private和privileged模式
2009/12/28 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
2014/09/21 Javascript
简介JavaScript中Math.LOG10E属性的使用
2015/06/14 Javascript
bootstrapValidator bootstrap-select验证不可用的解决办法
2017/01/11 Javascript
Vue.js基础知识小结
2017/01/13 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
[01:05:41]EG vs Optic Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
bpython 功能强大的Python shell
2016/02/16 Python
python 实时遍历日志文件
2016/04/12 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
2016/08/30 Python
Python标准库之collections包的使用教程
2017/04/27 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
2017/09/05 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
对Python _取log的几种方式小结
2019/07/25 Python
Python浮点数四舍五入问题的分析与解决方法
2019/11/19 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
pytorch 常用函数 max ,eq说明
2020/06/28 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
护士毕业生自荐信
2014/02/07 职场文书
公司委托书格式范文
2014/04/04 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
2017年大学生寒假社会实践活动总结
2016/04/06 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python