关于mysql分组完后,取每组的前五条。

求大神帮助!

SELECT
ad.pkid,
ad.ad_name AS adName,
ad.content_path AS contentpath,
ad.ad_comes AS adComes,
sh.schoolyard_name AS schoolyardName
FROM
`t_ad` ad
LEFT JOIN `t_ad_city_section` ads
ON ad.pkid = ads.ad_id
LEFT JOIN `t_schoolyard` sh
ON ads.sch_id = sh.pkid
WHERE ad.publish_status = 1
AND ad.del_status = 0
AND ad.ad_type = 3
AND ads.city_id = '6'
ORDER BY ad.remark,
sh.schoolyard_name

最后显示以 sh.schoolyard_name 分组完后每组的前五条,怎么搞?

使用模拟的 ROW_NUMBER + PARTITION 的方式

SELECT
  sale_item,
  sale_date,
  sale_money
FROM
(
SELECT
  CASE 
    WHEN @cn != sale_item THEN @rownum:= 1 
    ELSE @rownum:= @rownum + 1  
    END AS No,
  @cn := sale_item AS sale_item,
  sale_date,
  sale_money
FROM
  (SELECT @rownum:=0) r,
  (SELECT @cn:='') p,
  SALE_REPORT
ORDER BY
  SALE_ITEM,
  SALE_DATE DESC
) subQuery
WHERE
  no <=3;
 
+-----------+---------------------+------------+
| sale_item | sale_date           | sale_money |
+-----------+---------------------+------------+
| A         | 2012-12-31 00:00:00 |    2012.00 |
| A         | 2012-12-30 00:00:00 |    2012.00 |
| A         | 2012-12-29 00:00:00 |    2012.00 |
| B         | 2012-12-31 00:00:00 |      12.00 |
| B         | 2012-12-30 00:00:00 |      12.00 |
| B         | 2012-12-29 00:00:00 |      12.00 |
| C         | 2012-12-31 00:00:00 |      31.00 |
| C         | 2012-12-30 00:00:00 |      30.00 |
| C         | 2012-12-29 00:00:00 |      29.00 |
+-----------+---------------------+------------+
9 rows in set (0.02 sec)

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-10-06
语法是:

select * from <table> limit 5, 10;
拿到第6-15个记录。
第2个回答  2014-07-28
后面加 limit 0,5 不就行了追问

是分组,limit的话,就是取前五条

追答

可以写一个存储过程根据组名查询具体组的前五条 一条语句显示所有组的结果好像不行

本回答被提问者和网友采纳

关于mysql分组完后,取每组的前五条。
使用模拟的 ROW_NUMBER + PARTITION 的方式SELECT sale_item, sale_date, sale_moneyFROM(SELECT CASE WHEN @cn != sale_item THEN @rownum:= 1 ELSE @rownum:= @rownum + 1 END AS No, @cn := sale_item AS sale_item, sale_date, sale_moneyFROM (SELECT @rownu...

mysql中查询每天的前5条数据
AND main.日期时间列 > sub.日期时间列 ) < 5 ORDER BY main.日期时间列

MySQL:如何查询出每个分组中的 top n 条记录?
需求:查询出每月order_amount(订单金额) 排行前3的记录。例如对于2019-02,查询结果中就应该是这3条。解决方法:MySQL 5.7 和 MySQL 8.0 有不同的处理方法。1. MySQL 5.7 我们先写一个查询语句。根据order_date 中的年、月,和order_amount进行降序排列。然后,添加一个新列:order_amount(...

请问mysql的group by如何取前n个?
select a.* from 表 a where exists (select count(*) from 表 where A = a.A and B< a.B having count(*) < 2)order by a.A

Mysql 分组以后取每组的前三名数据
SELECT uid, group_concat(subject)FROM (SELECT id, uid, subject FROM (SELECT id, uid, subject,(SELECT COUNT(*)FROM t_subject WHERE uid = t.uid AND subject <= t.subject) RK FROM t_subject t) t1 WHERE rk <= 3) t2 GROUP BY uid 多了个a.原来 或者你直接用个substring()...

mysql分组后,取每组的前3条数据(并且有顺序)
不列出表结构及测试数据,只能这样大概写个思路了:select a.from (select t1.*,(select count(*)+1 from 表 where 分组字段=t1.分组字段 and 排序字段<t1.排序字段) as group_id from 表 t1 ) a where a.group_id<=3

MySql 分组查询并获取每组数据的最大值
假设我们有一张普通积分记录表,当针对特定用户查询时,可能返回多条满足条件的数据记录。若目标是找出这多条记录中task_correct值最大的一条,可以通过特定SQL语句实现。此过程直观展示了MySQL在复杂数据处理中的强大功能。通过分组查询和最大值函数的结合,不仅能高效筛选出所需信息,还为数据管理和分析...

mysql如何实现分组排序并取组内第一条数据?
在MySQL中,实现分组排序并获取组内第一条数据,主要依赖于使用PARTITION BY子句配合ROW_NUMBER()窗口函数。具体步骤如下:假设你有一个名为your_table的表,其中包含group_column表示分组的列,以及data_column表示要排序的数据列。通过ROW_NUMBER()函数为每个分组内的行添加排名,外层查询中选择排名为1...

Mysql 分组查询top n(多种方法)
可以这样理解,在情况2中相当于使用了 名次空缺 , 分数相同的人其后面那个人,的名次为 前面的人数+1 , 这里的 ”李四-java“这行,他的名次应当是 5 , 所有top3自然取不到 ”李四-java“这行。情况2和情况 写法都是对应的, 需要注意的是 并列名次,后面的人 是否需要保持名次空缺...

php mysql group分组后怎么排序?
一般使用group时, select 字段列表里,一定要包含group的字段, 其余的字段也必须和group字段一一对应的, 不然查询结果会有问题. 然后再根据字段列表里的某些字段进行排序就没有问题了.-- group_name, group_id, group_add_time 个字段分别为分类名称,分类id和分类添加的时间, 它们是一一对应的. 如此...

相似回答