2012-03-01 50 views
0

想知道你是否可以在這裏幫我一下,在一個泡菜...基本上我有一個數據庫與多個表,也有多個行/列與佈局類似於下面顯示。PostgresSQL查詢問題

該網站是在一個表中命名的網站和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的沒有定數,基本上只給我一個單一網站的30個結果,只有1列不同(我想過濾到最高值)。

回答

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」(除非用戶詢問問題具體說明了一個版本) – 2012-03-01 12:26:54

+0

當然,我不是Postgre的人,只是與我通過Google找到的第一個人聯繫,別名也不太可能改變在更高版本中,更新了鏈接現在的版本現在 – ntziolis 2012-03-01 13:03:46

+0

謝謝。我實際上的意思是使用* current *這個詞,而不是版本號;) – 2012-03-01 13:22:54

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

道歉我可以從一張桌子上做整個查詢......我在查詢中添加了不必要的信息,我感到很愚蠢。 SELECT site,max(ID)+1 as ID FROM site_eq GROUP BY site ORDER BY max(ID)+1 DESC LIMIT x; 做得很好。 – user1242339 2012-03-01 11:11:20