我尝试了我的所有技能,以获得MySql的结果,但它对我不起作用。
示例表:
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
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排序
SELECT * from docs GROUP BY period,rid ORDER BY id DESC
This query return data of order by ASCMYSQL 5+,因此它可以在所有服务器上运行。
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')
;发布于 2020-08-17 06:13:48
您可以使用row_number()
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+,后者支持窗口函数。
编辑:
假设所有组至少有两行,您可以使用
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
);https://stackoverflow.com/questions/63441253
复制相似问题