2013-01-04 49 views
0

我已經閱讀了一些其他文章,但是他們都不會完全迴應我的問題。在SQL上引入MAX JOIN

我設法生成以下選擇:

SELECT regions.id, regions.name, auditoria_status from regions 
LEFT OUTER JOIN regions regions_regions ON regions_regions.id = regions.parent_id 
JOIN(
    SELECT auditoria.entidade_id, auditoria.entidade_tipo, MAX(auditoria.status) AS auditoria_status 
    from auditoria GROUP BY auditoria.entidade_id, auditoria.entidade_tipo 
) AS a 
ON a.entidade_id = regions.id AND a.entidade_tipo = 'Terceiro' ORDER BY regions.id 

這將正確地列出我的所有地區。布我預計auditoria_status給我帶來auditoria.status的最大價值。

其中一個區域記錄在auditoria表中有3個條目。一個狀態爲0,一個狀態爲1,第三個狀態爲2.我期待得到這個區域ID,它的名稱和2,因爲它是auditoria_status,但給我0.

我的目標是列出所有區域沒有重複),但將只表禮堂的最大狀態爲區域

編輯

好吧,這SQL實際工作中,僞傢伙在這裏沒有正確輸入entidade_tipo條件應該是「區」而不是'Terceiro'。所以,它的工作。

+0

,你卻加入你的子查詢,你沒」實際上是由它來過濾。 – jdotjdot

+0

當你用'max(auditoria.status)'運行子查詢時,結果如何? 「地區」表的表結構是什麼? – Taryn

回答

1

你所做的只是加入你的子查詢,你實際上並沒有過濾它。

如果我正確理解你的問題,如果你需要的是它的ID,名稱和最高的地位,你可以做:

SELECT 
    regions.*, a.max_status 
FROM 
    regions 
JOIN 
    (SELECT id, MAX(status) as max_status 
    FROM auditoria WHERE entidade_tipo = 'Terceiro' 
    GROUP BY id) AS a 
ON 
    regions.id = a.id 
ORDER BY regions.id 
+0

來自PostgreSQL的錯誤: '錯誤:列「regions.name」必須出現在GROUP BY子句中或用於聚合函數中 LINE 1:SELECT regions.id,regions.name,MAX(auditoria.status)' 而另一個問題是,我只把姓名和身份證只是爲了說明。最正確的是區域。*(我使用來自區域的所有屬性)。 這樣做會導致PG返回錯誤的每個屬性不在group by子句 – lcguida

+0

對於錯誤很抱歉,這很愚蠢,因爲它是一對一但仍然正確。給我一秒更新。 – jdotjdot

+0

立即查看更新,試試這是否正常。 – jdotjdot