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 相关文章推荐
解决Navicat for Mysql连接报错1251的问题(连接失败)
May 27 MySQL
MYSQL 无法识别中文的永久解决方法
Jun 03 MySQL
Mysql中存储引擎的区别及比较
Jun 04 MySQL
mysql事务隔离级别详情
Oct 24 MySQL
mysql函数全面总结
Nov 11 MySQL
mysql中varchar类型的日期进行比较、排序等操作的实现
Nov 17 MySQL
MySQL窗口函数的具体使用
Nov 17 MySQL
MySQL中order by的使用详情
Nov 17 MySQL
MySQL Innodb索引机制详细介绍
Nov 23 MySQL
mysql的单列多值存储实例详解
Apr 05 MySQL
MySQL 外连接语法之 OUTER JOIN
Apr 09 MySQL
SQL Server数据库的三种创建方法汇总
May 08 MySQL
教你解决往mysql数据库中存入汉字报错的方法
MySQL时间设置注意事项的深入总结
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 #MySQL
MySQL创建高性能索引的全步骤
将图片保存到mysql数据库并展示在前端页面的实现代码
MySQL的join buffer原理
Apr 29 #MySQL
Mysql服务添加 iptables防火墙策略的方案
Apr 29 #MySQL
You might like
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
基于php和mysql的简单的dao类实现crud操作功能
2014/01/27 PHP
php使用session二维数组实例
2014/11/06 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
PHP使用内置函数生成图片的方法详解
2016/05/09 PHP
filemanage功能中用到的lib.js
2007/04/08 Javascript
判断JavaScript对象是否可用的最正确方法分析
2008/10/03 Javascript
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
javascript执行环境及作用域详解
2016/05/05 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
2016/08/31 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
Angular的事件和表单详解
2016/12/26 Javascript
解决VUEX刷新的时候出现数据消失
2017/07/03 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
python根据开头和结尾字符串获取中间字符串的方法
2015/03/26 Python
Linux下为不同版本python安装第三方库
2016/08/31 Python
Django实现登录随机验证码的示例代码
2018/06/20 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
python:动态路由的Flask程序代码
2019/11/22 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
2020/06/29 Python
python实现双人五子棋(终端版)
2020/12/30 Python
canvas压缩图片以及卡片制作的方法示例
2018/12/04 HTML / CSS
一道写SQL的面试题和答案
2013/11/19 面试题
大学生活学习的自我评价
2013/12/03 职场文书
医务工作者先进事迹材料
2014/01/26 职场文书
财务部总监岗位职责
2014/03/12 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
财产分割协议书
2016/03/22 职场文书
让文件路径提取变得更简单的Python Path库
2021/05/27 Python
Python中的套接字编程是什么?
2021/06/21 Python
Python3的进程和线程你了解吗
2022/03/16 Python
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技