我有一个包含三列的表: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。
任何帮助将不胜感激。
答案 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;
注意:试一试,看看它是否适合您的需求。对于大型团队,不会很好地扩展。