SQL-запрос для Top 5 каждой категории - PullRequest
1 голос
/ 01 августа 2009

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

Я хочу выбрать SQL, который даст мне 5 самых последних значений каждой категории. Как мне поступить и сделать это?

Я пробовал это:

select
  a."Category",
  b."Timestamp",
  b."Value"
from
(select "Category" from "Table" group by "Category" order by "Category") a,
(select a."Category", c."Timestamp", c."Value" from "Table" c
where c."Category" = a."Category" limit 5) b

К сожалению, он этого не допустит, поскольку «подзапрос в FROM не может ссылаться на другие отношения того же уровня запроса».

Кстати, я использую PostGreSQL 8.3.

Любая помощь будет оценена.

1 Ответ

4 голосов
/ 01 августа 2009
SELECT t1.category, t1.timestamp, t1.value, COUNT(*) as latest
FROM foo t1
JOIN foo t2 ON t1.id = t2.id AND t1.timestamp <= t2.timestamp
GROUP BY t1.category, t1.timestamp
HAVING latest <= 5;

Примечание: Попробуйте это и посмотрите, подходит ли оно для ваших нужд. Это не будет масштабироваться хорошо для больших групп.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...