每个类别的前5名的SQL查询

时间:2009-07-31 23:24:10

标签: sql

我有一个包含三列的表:Category,Timestamp和Value。

我想要的是一个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 个答案:

答案 0 :(得分:4)

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;

注意:试一试,看看它是否适合您的需求。对于大型团队,不会很好地扩展