Как я могу получить только последние 2 записи в каждой группе при использовании GROUP_CONCAT? - PullRequest
0 голосов
/ 10 апреля 2020
SELECT id, GROUP_CONCAT(type SEPARATOR '/') as types FROM `sems` GROUP by year

Я просто хочу получить 2 последние записи по каждой группе

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Если вы используете 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 есть связи, все связанные записи будут учтены.

0 голосов
/ 10 апреля 2020

Если ваши данные не слишком многочисленны, вы можете использовать:

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

? - для столбца, используемого для определения «последнего» * ​​1005 *

...