2009-07-31 12 views
1

カテゴリ、タイムスタンプ、および値の3つの列を持つテーブルがあります。各カテゴリのトップ5のSQLクエリ

私が望むのは、各カテゴリの最新の5つの値を私に与えるSQLの選択です。私はどうやってそれをやりますか?

私はこれを試してみました:

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

類似の質問:http://stackoverflow.com/questions/1146913/select-10-rows-perday-with-order/1174434#1174434 – krdluzni

+0

n個のカテゴリがあります。@hobodave –

+0

私はあまり単純化していません。 3から30000までの任意の数のカテゴリがあります。 –

答えて

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; 

注:これを試してみて、それはあなたのニーズに合わせて適切に行った場合に参照してください。 は、大きなグループの場合は、のスケールには適合しません。

+0

ありがとうございました。パフォーマンスは幸いにもここの本質ではないので、私が必要なのはそれだけです。ありがとうございました! :-) –

+0

これは私が今見つけるものです – complez

関連する問題