在SQL JOIN上引入MAX

时间:2013-01-04 17:07:02

标签: sql postgresql

我已阅读其他一些帖子,但他们都没有完全回复我的问题。

我设法生成以下选择:

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条件,该条件应该是'Region'而不是'Terceiro'。所以,它的工作原理。

1 个答案:

答案 0 :(得分: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