首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取n条按2列分组的记录

获取n条按2列分组的记录
EN

Stack Overflow用户
提问于 2020-08-17 03:44:01
回答 1查看 39关注 0票数 0

我尝试了我的所有技能,以获得MySql的结果,但它对我不起作用。

示例表:

代码语言:javascript
复制
id  period  rid
1   1m      22
2   5m      22
3   1m      33
4   5m      33

5   1m      22
6   5m      22
7   1m      33
8   5m      33

9   1m      22
10  5m      22

我想要每组的最新2条记录,在2列期间,rid

代码语言:javascript
复制
OUT PUT
id  period  rid
10  1m      22
9   5m      22
8   1m      33
7   5m      33

6   1m      22
7   5m      22
4   1m      33
3   5m      33

有更多的句号和Rid,所以我需要每个组(句号,rid)的最新2条记录,按id DESC排序

代码语言:javascript
复制
SELECT * from docs GROUP BY period,rid ORDER BY id DESC
This query return data of order by ASC

MYSQL 5+,因此它可以在所有服务器上运行。

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `docs` (
  `id` int(6) unsigned NOT NULL,
  `period` varchar(10) NOT NULL,
  `rid` int(3) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

INSERT INTO `docs` (`id`, `period`, `rid`) VALUES
  ('1', '1m', '22'),
  ('2', '5m', '22'),
  ('3', '1m', '33'),
  ('4', '5m', '33'),

  ('5', '1m', '22'),
  ('6', '5m', '22'),

  ('7', '1m', '33'),
  ('8', '5m', '33'),
  ('9', '1m', '22'),
  ('10', '5m', '22')
  ;

小提琴:http://sqlfiddle.com/#!9/55ae5/3

EN

回答 1

Stack Overflow用户

发布于 2020-08-17 06:13:48

您可以使用row_number()

代码语言:javascript
复制
select d.*
from (select d.*,
             row_number() over (partition by period, rid order by id desc) as seqnum
      from docs d
     ) d
where seqnum <= 2
order by id desc;

Here是一个db<>fiddle。请注意,这支持MySQL 8+,后者支持窗口函数。

编辑:

假设所有组至少有两行,您可以使用

代码语言:javascript
复制
SELECT d.*
FROM docs d
WHERE d.id >= (SELECT d2.id
               FROM docs d2
               WHERE d2.period = d.period and
                     d2.rid = d.rid
               ORDER BY d2.id DESC
               LIMIT 1 OFFSET 1
              );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63441253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档