Выбор самого последнего в составе группы (или другое решение ...) - PullRequest
3 голосов
/ 21 декабря 2011

У меня есть таблица, в которой значимые столбцы выглядят так:

username
source
description

Моя цель - получить 10 самых последних записей, в которых комбинация пользователь / источник уникальна. Из следующих данных:

1 katie    facebook    loved it!
2 katie    facebook    it could have been better.
3 tom      twitter     less then 140
4 katie    twitter     Wowzers!

Запрос должен возвращать записи 2,3 и 4 (допустим, более высокие идентификаторы более поздние - в фактической таблице используется столбец отметки времени).

Мое текущее решение «работает», но требует 1 выбор, чтобы сгенерировать 10 записей, а затем 1, чтобы получить правильное описание для каждой строки (таким образом, 11 выбирает, чтобы сгенерировать 10 записей) ... Я должен представить, что есть лучший способ идти. Это решение:

SELECT max(id) as MAX_ID, username, source, topic
FROM   events
GROUP BY source, username
ORDER BY MAX_ID desc;

Возвращает правильные идентификаторы, но неправильные описания, поэтому я могу затем выбрать правильные описания по идентификатору записи.

1 Ответ

1 голос
/ 22 декабря 2011

Не проверено, но вы должны быть в состоянии справиться с этим с join:

SELECT
    fullEvent.id,
    fullEvent.username,
    fullEvent.source,
    fullEvent.topic
FROM
    events fullEvent JOIN
    (
        SELECT max(id) as MAX_ID, username, source
        FROM   events
        GROUP BY source, username
    ) maxEvent ON maxEvent.MAX_ID = fullEvent.id
ORDER BY fullEvent.id desc;
...