Estoy tratando de obtener la fecha máxima de varias tablas cuando esas tablas tienen una geometría particular. Mis tablas se ven más o menos así (por supuesto, todas son diferentes, pero las acorté para que quede más claro):
Un tipo de tabla:
Id, Info, Geometry, DateY finalmente tengo otra tabla que se ve así (acortada nuevamente):
tabla B:
Id, GeometryAhora, lo que quiero hacer es unir todas mis tablas de tipo A en Geometría donde se cruzan con la geometría de la tabla B, y obtener la tabla A que tiene la fecha más reciente.
Actualmente tengo la siguiente solicitud que está funcionando:
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; Ahora me gustaría poder hacer ese tipo de combinación en una tabla múltiple que se parece a la tabla A. He oído hablar de la función GREATEST pero no estoy seguro de cómo usarla. Además, uso Postgresql si eso hace alguna diferencia.
Parece que está buscando UNION ALL , por lo que puede tratar los datos de diferentes tablas como si fueran datos de una sola tabla:
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;A grandes rasgos, MAX es una función agregada, por lo que usa MAX para obtener el valor más alto de la misma columna en varias filas diferentes.
GREATEST es una función escalar, usa MAYOR para obtener el valor más alto de diferentes columnas en la misma fila.
p.ej:
SELECT GREATEST(col1,col2,col3)Mejor: https://www.postgresql.org/docs/9.5/static/functions-conditional.html
Máx.: https://www.postgresql.org/docs/9.5/static/functions-aggregate.html