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 05 MySQL
MySQL复制问题的三个参数分析
Apr 07 MySQL
.Net Core导入千万级数据至Mysql的步骤
May 24 MySQL
MySQL8.0无法启动3534的解决方法
Jun 03 MySQL
MySQL系列之开篇 MySQL关系型数据库基础概念
Jul 02 MySQL
MySQL的全局锁和表级锁的具体使用
Aug 23 MySQL
mysql主从复制的实现步骤
Oct 24 MySQL
Mysql分析设计表主键为何不用uuid
Mar 31 MySQL
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
Apr 12 MySQL
Mysql开启外网访问
May 15 MySQL
MySql如何将查询的出来的字段进行转换
Jun 14 MySQL
教你解决往mysql数据库中存入汉字报错的方法
MySQL时间设置注意事项的深入总结
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 #MySQL
MySQL创建高性能索引的全步骤
将图片保存到mysql数据库并展示在前端页面的实现代码
MySQL的join buffer原理
Apr 29 #MySQL
Mysql服务添加 iptables防火墙策略的方案
Apr 29 #MySQL
You might like
php简单封装了一些常用JS操作
2007/02/25 PHP
ajax 的post方法实例(带循环)
2011/07/04 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
PHP的autoload机制的实现解析
2012/09/15 PHP
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
ThinkPHP3.1新特性之多层MVC的支持
2014/06/19 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
解决 FireFox 下[使用event很麻烦] 的问题.
2006/08/22 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
2012/08/14 Javascript
jquery 面包屑导航 具体实现
2013/06/05 Javascript
location.href用法总结(最主要的)
2013/12/27 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
jquery实现拖拽调整Div大小
2015/01/30 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
jQuery实现的checkbox级联选择下拉菜单效果示例
2016/12/26 Javascript
JS实现的简单标签点击切换功能示例
2017/09/21 Javascript
Vue2.0父子组件传递函数的教程详解
2017/10/16 Javascript
Vue父子组建的简单通信之控制开关Switch的实现
2018/06/04 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
2020/02/05 Javascript
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
在Python中使用异步Socket编程性能测试
2014/06/25 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
pandas实现导出数据的四种方式
2020/12/13 Python
求职信范文英文版
2014/01/05 职场文书
入党积极分子思想汇报范文
2014/01/05 职场文书
火车的故事教学反思
2014/02/11 职场文书
知名企业招聘广告词大全
2014/03/18 职场文书
新闻人物通讯稿
2014/10/09 职场文书
授权委托书
2015/01/28 职场文书
经理助理岗位职责
2015/02/02 职场文书
大学生实习介绍信
2015/05/05 职场文书
通知怎么写?
2019/04/17 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python