MySQL每个分类的前几条记录

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

ps:  @N 就是要取多少条

时间: 2024-08-06 11:06:19

MySQL每个分类的前几条记录的相关文章

[MySQL] 分组排序取前N条记录以及生成自动数字序列,类似group by后 limit

前言:         同事的业务场景是,按照cid.author分组,再按照id倒叙,取出前2条记录出来.        oracle里面可以通过row_number() OVER (PARTITION BY cid,author ORDER BY id DESC) 表示根据cid,author分组,在分组内部根据id排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的),而mysql数据库就没有这样的统计函数,需要自己写复杂的sql来实现. 1,录入测试数据 USE csd

MySQL分组排序取前N条记录以及生成自动数字序列--group by 后 limit 外加 rownumber

同事提了一个需求,要求按照某列分组,然后将各组的前几条抽取出来. 表结构 CREATE TABLE `total_freq_ctrl` ( `time` int(10) unsigned NOT NULL, `machine` char(64) NOT NULL, `module` char(32) NOT NULL, `total_flow` int(10) unsigned NOT NULL, `deny_flow` int(10) unsigned NOT NULL, PRIMARY KE

[mysql] 查询前几条记录

From: http://www.cnblogs.com/xuxm2007/archive/2010/11/16/1878211.html SELECT   *   FROM   table   LIMIT   5;           select     *     from     issu_info     limit     0,6             Limit     0,6       这里是对的,显示前6条                   select     *   

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 JOIN aa b ON a.ClsNo=b.ClsNo AND a.Score<b.Score group by a.id,a.

mysql查询各种类型的前N条记录

mysql查询各种类型的前N条记录,将3改为N(需查询条数)即可  (select * from event_info where event_type = 1  limit 3)union all(select * from event_info where event_type = 2  limit 3)union all(select * from event_info where event_type = 3  limit 3) 原文出处:http://my.oschina.net/u/

MySQL取每组的前N条记录

一.对分组的记录取前N条记录:例子:取前 2条最大(小)的记录 1 1.用子查询: 2 SELECT * FROM right2 a WHERE 2> 3 (SELECT COUNT(*) FROM right2 b WHERE b.id=a.id AND b.account>a.account) 4 ORDER BY a.id,a.account DESC 5 2.用exists半连接: 6 SELECT * FROM right2 a WHERE EXISTS 7 (SELECT COUN

SQL中显示查询结果的前几条记录

在使用数据库查询语句的过程中,我们经常需要返回查询结果的前几条或者中间几条数据,下面是我总结的几种数据库常用的方法:(table是数据库表名,table2是table表的别名) 1.SQLServer sqlserver支持top关键字,返回前若干条数据.select top 5 * from table;// 返回前5行数据 2.MySQL mysql支持limit,只能适用于mysql.limit子句用于强制select语句返回置顶的记录数,接受一个或两个数字参数,必须是整数常量.一个参数是

mysql语句:批量更新多条记录的不同值[转]

mysql语句:批量更新多条记录的不同值[转] mysql语句:批量更新多条记录的不同值 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 1 UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 如果更新同一字段为同一个值,mysql也很简单,修改下where即可: 1 UPDATE mytable SET myfield = 'value' WHERE other_field in ('o

从排序后的结果集中删除 前n条记录

端午有人休息,有人忙 操作前数据: --从排序后的结果集中删除 前n条记录delete from emp where empno in (select empno                   from (select *                           from emp                          where comm is not null                            and rownum < &n