SQL: возвращает самые последние действия, но не более 10 результатов - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть таблица с действиями, выполненными актерами, и я хочу вернуть 10 самых последних действий. Я хочу, чтобы актеры были уникальными в этом списке. «создан» является меткой времени / даты. Как я могу сделать это наиболее эффективно? Я придумал следующий запрос, который работает:

SELECT * 
FROM activities a
JOIN 
(SELECT actor, MAX(created) created 
 FROM activities 
 WHERE comment_type <> 'profile.status' 
 GROUP BY actor) t ON (a.actor = t.actor AND a.created = t.created) LIMIT 10

Стол в конечном итоге может быть довольно большим.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2011

ЕСЛИ вам нужен только актер, вы можете сделать это

SELECT DISTINCT actor -- and any other actor specific columns that are unique to the actor
FROM activities 
WHERE comment_type <> 'profile.status'
ORDER BY Created DESC
LIMIT 10
0 голосов
/ 21 декабря 2011

Вы можете поместить ограничение 10 внутри подзапроса.
Кроме этого это выглядит хорошо

SELECT * FROM activities a
INNER JOIN (
            SELECT 
              actor
              , MAX(created) created 
            FROM activities 
            WHERE comment_type <> 'profile.status' 
            GROUP BY actor
            LIMIT 10 OFFSET 0) t
      ON (a.actor = t.actor AND a.created = t.created) LIMIT 10
...