2015-09-22 2 views
1

Две таблицы: Темы Комментарии (Существует поле Тема, так что я знаю, в какой теме комментарий является)Группировка, а также заказ?

И я хочу, чтобы получить только новейший комментарий в каждой теме (максимальное значение в поле Дата) и затем заказывайте темы таким образом.

Query Я попытался:

SELECT User, Topic, Date 
FROM Comments 
GROUP BY Topic 
ORDER BY Date DESC 
+0

ВЫБРАТЬ пользователя, Тема, Дата от комментариев GROUP BY Тема ORDER BY DESC Дата – Tudvari

+0

Я попытался это, но по какой-то причине это выбрать первые комментарии по темам. – Tudvari

ответ

3

Возврата строка, если нет другого ряда с тем же темой не имеет более позднюю дату.

SELECT User, Topic, Date 
FROM Comments c1 
where not exists (select 1 from Comments c2 
        where c2.topic = c1.topic 
        and c2.date > c1.date) 
order by date desc 
+0

Спасибо, ваш исправил его, по какой-то причине ajmedway дал не тот пользователь. – Tudvari

+0

MySQL немного непредсказуем, если вы не следуете общей группе по правилу. (Если указано предложение GROUP BY, каждая ссылка на столбец в списке SELECT должна либо идентифицировать столбец группировки, либо быть аргументом функции набора.) – jarlh

+0

@ Tudvari Эй, просто улучшив мой запрос, не могли бы вы просто попробовать, чтобы увидеть, если это работает? Любопытно :) – ajmedway

1

Попробуйте это улучшенный ответ:

SELECT `User`, 
     temp.`Topic`, 
     temp.`Date` 
FROM (
     SELECT `Topic`, 
       MAX(`Date`) `Date` 
     FROM `Comments` 
     GROUP BY `Topic` 
     ORDER BY MAX(`Date`) DESC 
    ) temp 
INNER JOIN `Comments` 
    USING (`Topic`, `Date`) 
+0

Результаты: https://i.gyazo.com/6a596068f3d6412679dbcf7d0b30a798.png Столбцы: Пользователь, Тема, Дата – Tudvari

+0

@Tudvari, так что данные как ожидалось? Не могли бы вы поддержать мой ответ, если так? Спасибо :) – ajmedway

+0

Нет, это не так. В теме 1 есть 7 комментариев, и ваш запрос по какой-либо причине выбирает 4 из них. :( – Tudvari

Смежные вопросы