Как ВЫБРАТЬ записи, к которым последний комментарий был создан с SQL? - PullRequest
1 голос
/ 13 февраля 2020

У меня есть таблицы post и comment с внешним ключом (post_id) для публикации. Я хочу получить 100 записей "Bump Order". Запись, для которой была создана последняя запись комментария, идет первой. Моя первая попытка была:

SELECT * FROM post WHERE id IN
(
    SELECT DISTINCT post_id FROM comment
    ORDER BY created_time DESC
    LIMIT 100
);

Возвращает: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list

Вторая попытка:

SELECT * FROM post WHERE id IN
(
    SELECT post_id from
    (SELECT DISTINCT(post_id), posted FROM comment) AS c
    ORDER BY c.created_time DESC
    LIMIT 100
);

На этот раз без ошибок, но я не делаю, что хочу , Как я могу заставить SQL делать то, что я хочу?

1 Ответ

1 голос
/ 13 февраля 2020

Если вы хотите выбрать 100 сообщений с самыми последними комментариями, вы можете использовать агрегацию:

select p.id, p.title, p.author
from posts p
inner join comments c on c.post_id = p.id
group by p.id, p.title, p.author
order by max(c.created_at) desc
limit 100

При использовании этого метода вам нужно перечислить все posts столбцы, которые вы хотите см. в наборе результатов в предложении select и в предложении group by.

Другим вариантом является предварительная агрегация:

select p.*
from posts p
inner join (
    select post_id, max(created_at) max_created_at
    from comments 
    group by post_id 
    order by max(created_at) desc
    limit 100
) c on c.post_id = p.id
order by c.max_created_at desc
...