2017-04-24 32 views
0

我试图从多个表中获取最大日期时,这些表具有特定的几何。 我的表或多或少看起来像(当然他们都不同,但我缩短他们以使其更清晰):选择多个表上的最大值加入

表类型:

Id, Info, Geometry, Date 

最后我有一个其他表看起来像(再次缩短):

乙表:

Id, Geometry 

现在,我想要做的是加入的几何我所有的A型表,他们与B表几何体相交,并获取具有最近日期的A表。

目前,我有以下要求其工作:

UPDATE last_updateT SET date_last_update= S.dateMax 
FROM 
    (SELECT B.gid, MAX(A.last_date) AS dateMax 
    FROM B 
    JOIN A ON ST_Intersects(B.geometry, A.geometry) 
    GROUP BY B.gid) S 
WHERE T.id = S.gid; 

现在我希望能够做到那种认为加入多个表,看起来像表答:我听说过的函数GREATEST但我不确定如何使用它。 此外,我使用Postgresql,如果这有什么区别。

回答

1

看来你正在寻找UNION ALL,所以你可以把从就好像它是从数据的不同表中的数据只有一张桌子:

SELECT 
    b.gid, 
    MAX(x.last_date) AS dateMax 
FROM b 
JOIN 
(
    SELECT geometry, last_date FROM a 
    UNION ALL 
    SELECT geometry, last_date FROM aa 
    UNION ALL 
    SELECT geometry, last_date FROM aaa 
) x ON ST_Intersects(b.geometry, x.geometry) 
GROUP BY b.gid; 
+0

非常感谢,th似乎正是我所需要的。但是,一个小问题是,如果我的A型桌子非常重,这是最合适的方式吗? (对于某些人来说为数百万行) – Asew

+1

是的,方法没问题。无论如何,你的主要问题是只能找到带有函数的相交行,所以必须读取整个表。在这种情况下,'UNION ALL'在这里工作得很好,不应该放慢速度。 –