MySQL获取所有分类的前N条记录_Mysql

比如有文章表 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
, 获取所有分类
前N条记录
mysql获取第一条记录、mysql 获取最大值记录、mysql 获取上一条记录、mysql获取随机记录、mysql获取最新记录,以便于您获取更多的相关知识。

时间: 2024-10-26 17:20:12

MySQL获取所有分类的前N条记录_Mysql的相关文章

MySQL获取所有分类的前N条记录

  比如有文章表 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.In

MySQL获取所有分类和每个分类的前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                          

mysql分组取每组前几条记录(排名) 附group by与order by的研究_Mysql

--按某一字段分组取最大(小)值所在行的数据 复制代码 代码如下: /* 数据如下: name val memo a 2 a2(a的第二个值) a 1 a1--a的第一个值 a 3 a3:a的第三个值 b 1 b1--b的第一个值 b 3 b3:b的第三个值 b 2 b2b2b2b2 b 4 b4b4 b 5 b5b5b5b5b5 */ --创建表并插入数据: 复制代码 代码如下: create table tb(name varchar(10),val int,memo varchar(20)

mysql使用GROUP BY分组实现取前N条记录的方法_Mysql

本文实例讲述了mysql使用GROUP BY分组实现取前N条记录的方法.分享给大家供大家参考,具体如下: MySQL中GROUP BY分组取前N条记录实现 mysql分组,取记录 GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY分组取前N条记录实现方法. 这是测试表(也不知道怎么想的,当时表名直接敲了个aa,汗~~~~): 结果: 方法一: 复制代码 代码如下: SELECT a.id,a.SName,a.ClsNo,a.Score FROM aa a LEFT J

top n-python sqlalchemy 如何实现top写法。想按日期倒排序获取前10条记录。

问题描述 python sqlalchemy 如何实现top写法.想按日期倒排序获取前10条记录. python sqlalchemy 如何实现top写法.想按日期倒排序获取前10条记录. 解决方案 python懂的不多 这是一些积累的资料 希望对你有用啊http://download.csdn.net/album/detail/1239

php 利用array_slice函数获取随机数组或前几条数据_php实例

先给大家说下基本语法: array_slice ( array $array , int $offset [, int $length [, bool $preserve_keys ]] ) array_slice() 返回根据 offset 和 length 参数所指定的 array 数组中的一段序列.  如果 offset 非负,则序列将从 array 中的此偏移量开始.如果 offset 为负,则序列将从 array 中距离末端这么远的地方开始.  如果给出了 length 并且为正,则序

不同数据库中查询前几条记录的用法(SQL Server/Oracle/Postgresql)

SQL在不同数据库中查询前几条记录的用法分类 1. orACLE Select * FROM TABLE1 Where ROWNUM<=N 2. INFORMIX Select FIRST N * FROM TABLE1 3. DB2 Select * ROW_NUMBER() OVER(ORDER BY COL1 DESC) AS ROWNUM Where ROWNUM<=N 或者Select COLUMN FROM TABLE FETCH FIRST N ROWS ONLY 4. SQL

Lucene分页只能查询是对搜索返回的结果进行分页,而不是对搜索结果的总数量进行分页,因此我们搜索的时候都是返回前n条记录?

问题描述 Lucene分页查询是对搜索返回的结果进行分页,而不是对搜索结果的总数量进行分页,因此我们搜索的时候都是返回前n条记录.?如果只能这样的话有没有什么方法性价比高点的方法? 解决方案

mysql 分组group by排序取每条记录中,时间最大的一条记录

mysql 分组 group by, 排序 取每条记录中,时间最大的一条记录 以下是 test 表,测试sql CREATE TABLE IF NOT EXISTS `test` ( `id` int(10) unsigned NOT NULL auto_increment, `install` int(10) unsigned NOT NULL, `day` int(10) unsigned NOT NULL, `aid` int(10) unsigned NOT NULL, PRIMARY