2012-03-01 12 views
0

ここで私を助けることができるかどうかわかりませんが、基本的に私は複数のテーブルを持つDBを持っています。PostgreSQLのクエリの問題

サイトはテーブルという名前のサイトにあり、IDとタイプがSite_EQ

ラベルされたテーブルである
Site ID Type 
A0004 2 abc 
A0004 3 abcd 
A0004 4 abcde 
A0005 2 abc 
A0005 3 abcd 
A0005 4 abcde 
A0005 5 abc 
A0005 6 abcd 
A0005 7 abcde 

基本的に私は、サイトごとに最高のID値を求めるサイトで結果をフィルタリングされてやろうとしていますし、他のものを削除します。たとえば、A0010のIDが1〜20の場合、結果を表示します。

A0010 20 Bla 

など

A0010 1 Bla 
A0010 2 Bla 

を無視して、それは1-3または1-30かもしれIDのないセット数が存在しないようにやって行くのかわかりません、基本的に私は1つの列だけが異なる単一のサイトに対して30の結果を得ています(これは最高の値に限定してフィルタリングしたい)。

答えて

0

これはそれを行う必要があります。

SELECT T1.Site, T1.ID, T1.Type 
FROM SomeTable T1, (SELECT Site, MAX(ID) AS ID 
        FROM SomeTable 
        GROUP BY Site) T2 
WHERE T2.Site = T1.Site 
AND T2.ID = T1.ID 

をトリックはあなたのサイト+最大IDを与えるサブクエリを持っている、あなたはのでによるグループ分けにかかわらず、同時にタイプを取得することはできません実際のテーブルと再び結合する必要があります。

ここでは、テーブルエイリアス(T1T2)の説明を見つけることができます。
http://www.postgresql.org/docs/9.1/static/queries-table-expressions.html#QUERIES-TABLE-ALIASES

+0

「現在」を使用し、手動の旧式のバージョンにリンクしないでください「8.2」の代わりに(具体的に質問するユーザーがバージョンを述べない限り) –

+0

私はPostgreの人ではなく、私がGoogle経由で見つけた最初のものにリンクしているだけで、エイリアスのものは変更されていませんそれ以降のバージョンでは、現在のバージョンは – ntziolis

+0

ありがとうございます。私は実際にバージョン番号の代わりに* current *という言葉を使用することを意味しました;) –

1

試してみてください。

select Site, ID, Type from 
(select s.*, row_number() over (partition by Site order by ID desc) rn 
from Site_EQ) q 
where rn=1 
+0

謝罪私は1つのテーブルからクエリ全体を行うことができます...私は愚かな感じのクエリに不要な情報を追加しました。 SELECTサイト、MAX(ID)+1 MAX(ID)+1 DESC LIMIT Xでサイト ORDER BY site_eq 群からID として; はうまくいった。 – user1242339