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 sql_mode修改不生效的原因及解决
May 07 MySQL
MySQL表字段时间设置默认值
May 13 MySQL
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
May 25 MySQL
Mysql systemctl start mysqld报错的问题解决
Jun 03 MySQL
详解MySQL中的pid与socket
Jun 15 MySQL
MySQL的Query Cache图文详解
Jul 01 MySQL
一次SQL如何查重及去重的实战记录
Mar 13 MySQL
MySQL如何快速创建800w条测试数据表
Mar 17 MySQL
MySQL的存储函数与存储过程的区别解析
Apr 08 MySQL
mysql数据库实现设置字段长度
Jun 10 MySQL
mysql函数之截取字符串的实现
Aug 14 MySQL
MySQL下载安装配置详细教程 附下载资源
Sep 23 MySQL
教你解决往mysql数据库中存入汉字报错的方法
MySQL时间设置注意事项的深入总结
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 #MySQL
MySQL创建高性能索引的全步骤
将图片保存到mysql数据库并展示在前端页面的实现代码
MySQL的join buffer原理
Apr 29 #MySQL
Mysql服务添加 iptables防火墙策略的方案
Apr 29 #MySQL
You might like
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
2013/12/22 PHP
php5.3 goto函数介绍和示例
2014/03/21 PHP
PHP积分兑换接口实例
2015/02/09 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
javascript调试说明
2010/06/07 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
javascript中setTimeout使用指南
2015/07/26 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
javascript html5实现表单验证
2016/03/01 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
详解Vue的computed(计算属性)使用实例之TodoList
2017/08/07 Javascript
浅析Angular19 自定义表单控件
2018/01/31 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
2018/09/29 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
Vue+Express实现登录状态权限验证的示例代码
2019/05/05 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
解析Python中的__getitem__专有方法
2016/06/27 Python
python函数的5种参数详解
2017/02/24 Python
python3实现爬取淘宝美食代码分享
2018/09/23 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
用python实现刷点击率的示例代码
2019/02/21 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
详解CSS3阴影 box-shadow的使用和技巧总结
2016/12/03 HTML / CSS
Linux上比较文件的命令都有哪些
2012/02/24 面试题
外企财务年会演讲稿
2014/01/03 职场文书
互联网创业计划书的书写步骤
2014/01/28 职场文书
就职演讲稿范文
2014/05/19 职场文书
新店开张活动方案
2014/08/24 职场文书
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL