选择多表连接的最大值

时间:2017-04-24 08:36:23

标签: sql postgresql

当这些表具有特定几何时,我试图从多个表中获取最大日期。 我的桌子或多或少看起来像那样(当然他们都是不同的但我缩短了它们以便更清楚):

表格类型:

Id, Info, Geometry, Date

最后我还有一张看起来那样的桌子(再次缩短):

B表:

Id, Geometry

现在,我想要做的是将几何表格连接到几何图形,它们与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;

现在我希望能够在多个桌子上进行这种联接,看起来像表A.我已经听说过函数GREATEST,但我不知道如何用它。 另外,如果有任何差异,我会使用Postgresql

2 个答案:

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

答案 1 :(得分:0)

概括地说,MAX是一个聚合函数,因此您可以使用MAX从多个不同列的同一列中获取最高值。

GREATEST是一个标量函数,您使用GREATEST从同一行中的不同列获取最高值。

例如:

SELECT GREATEST(col1,col2,col3)

最伟大的:https://www.postgresql.org/docs/9.5/static/functions-conditional.html

Max:https://www.postgresql.org/docs/9.5/static/functions-aggregate.html