使用GROUP_CONCAT时如何仅获得每个组的最新2条记录?

问题描述 投票:-1回答:2
SELECT id, GROUP_CONCAT(type SEPARATOR '/') as types FROM `sems` GROUP by year

我只想获取每组的2条最新记录

mysql sql group-by greatest-n-per-group group-concat
2个回答
1
投票

如果您正在运行MySQL 8.0,则可以使用row_number()。您需要一个排序列来定义latest记录,我假设是ordering_id

select id, group_concat(type order by rn separator '/') types
from (
    select id, type, row_number() over(partition by id order by ordering_id desc) rn
    from sems
) t
where rn <= 2
group by id

在早期版本中,一种选择是使用子查询进行过滤:

select id, group_concat(type order by rn separator '/') types
from sems s
where s.ordering_id >= (
    select s1.ordering_id
    from sems s1
    where s1.id = s.id
    order by s1.ordering_id desc
    limit 2
)
group by id

这假定(id, ordering_id)元组是唯一的。如果不是这样,并且在前2位存在联系,则所有相关记录都将被考虑在内。


0
投票

如果您的数据不是太多,则可以使用:

SELECT id,
       SUBSTRING_INDEX(GROUP_CONCAT(type ORDER BY ? DESC SEPARATOR '/'), '/', -2) as types
FROM `sems`
GROUP by year;.

?用于定义“最新”的列

© www.soinside.com 2019 - 2024. All rights reserved.