Если вы используете MySQL 8.0, вы можете использовать row_number()
для этого. Вам нужен столбец заказа для определения самой последней записи , я предположил 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 есть связи, все связанные записи будут учтены.