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 24 MySQL
MySQL 表空间碎片的概念及相关问题解决
May 07 MySQL
详解MySQL数据库千万级数据查询和存储
May 18 MySQL
MySQL 重命名表的操作方法及注意事项
May 21 MySQL
解决Navicat for Mysql连接报错1251的问题(连接失败)
May 27 MySQL
MySQL注入基础练习
May 30 MySQL
Mysql数据库按时间点恢复实战记录
Jun 30 MySQL
SQL实现LeetCode(176.第二高薪水)
Aug 04 MySQL
MySQL 数据类型详情
Nov 11 MySQL
MySQL数据库如何给表设置约束详解
Mar 13 MySQL
jdbc中自带MySQL 连接池实践示例
Jul 23 MySQL
教你解决往mysql数据库中存入汉字报错的方法
MySQL时间设置注意事项的深入总结
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 #MySQL
MySQL创建高性能索引的全步骤
将图片保存到mysql数据库并展示在前端页面的实现代码
MySQL的join buffer原理
Apr 29 #MySQL
Mysql服务添加 iptables防火墙策略的方案
Apr 29 #MySQL
You might like
Laravel5.7 Eloquent ORM快速入门详解
2019/04/12 PHP
JavaScript 创建对象
2009/07/17 Javascript
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
js打造数组转json函数
2015/01/14 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
JavaScript来实现打开链接页面的简单实例
2016/06/02 Javascript
jquery实现点击页面回到顶部
2016/11/23 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
2016/12/23 Javascript
基于input动态模糊查询的实现方法
2017/12/12 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
Python去除字符串两端空格的方法
2015/05/21 Python
在Python中使用next()方法操作文件的教程
2015/05/24 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
详解基于python的图像Gabor变换及特征提取
2020/10/26 Python
canvas绘制文本内容自动换行的实现代码
2019/01/14 HTML / CSS
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
ROSEFIELD手表荷兰官方网上商店:北欧极简设计女士腕表品牌
2018/01/24 全球购物
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
年度考核自我鉴定
2013/11/09 职场文书
医学检验专业个人求职信范文
2013/12/04 职场文书
军训心得体会
2013/12/31 职场文书
大学生个人自荐信
2014/02/24 职场文书
大型会议接待方案
2014/03/01 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
人事局接收函
2015/01/31 职场文书
市场部岗位职责
2015/02/12 职场文书
2015年财政所工作总结
2015/04/25 职场文书
订货会主持词
2015/07/01 职场文书
生活小常识广播稿
2015/08/19 职场文书
2016高考寄语集锦
2015/12/04 职场文书