问题描述
Begin_Date ID
2015-12-14 00:00:00.0000000 1
2015-12-10 19:00:00.0000000 2
2015-12-09 19:00:00.0000000 3
2015-12-07 00:00:00.0000000 4
2015-12-06 00:00:00.0000000 5
并根据ID将与这些记录相关联的位置的表
DateAndTime ID
2015-12-14 00:00:00.0000000 1
2015-12-15 19:00:00.0000000 1
2015-12-16 19:00:00.0000000 1
2015-12-12 00:00:00.0000000 2
2015-12-13 00:00:00.0000000 2
到目前为止,我有一个查询来选择可用的第一个点。接下来,我想基于多边形层的点选择进行空间连接。结果将显示id,第一个点及其所属的多边形。
所需结果:
ID point Area
35 POINT(-109.607635 40.876372) TEST
我被困的地方:
SELECT
t2.ID,ARRAY_AGG(ST_GeogPoint(Longitude,Latitude) ORDER BY t3.DateAndTime ASC LIMIT 1)[ORDINAL(1)] AS point,ST_GeogFromText(WKT) geo
FROM `Table1` as t1,`Table2` t2
INNER JOIN
`Table3` AS t3
ON t2.ID = t3.ID AND t3.DateAndTime >= t2.BeginDate
AND ST_Within(ST_GeogPoint(t3.Longitude,t3.Latitude),ST_GeogFromText(t1.WKT))
GROUP BY t2.ID;
我不确定我做对的几件事是,当我使用ST_Within函数时,它没有使用在查询的第一部分中选择的点。我还得到一个错误:ST_within函数中的无法识别的名称t3。我需要在某处有一个嵌套的select语句吗?
解决方法
尚不清楚输入模式是什么,因此这不是完整的查询,但是由于您有一个查询选择了第一个工作点,因此可以将其用作子查询:
SELECT
ST_GeogFromText(WKT) geo,...
FROM `Table1` as t1
JOIN (
SELECT ST_GeogPoint(t3.Longitude,t3.Latitude) AS StartPoint,...
<rest of the query that selects the first point>
) AS t4
ON ST_Within(t4.StartPoint,ST_GeogFromText(t1.WKT))