【发布时间】:2016-03-18 19:38:48
【问题描述】:
我正在尝试使用 PostgreSQL 和 PostGIS 中的 SQL 来解决视线 (LoS) 问题。为此,我有一个表 pitch_at_point,其中包含一个 id、一个点几何图形和一个间距。
pitch_at_point(id integer,geom geometry,degrees float)
id 列的最低值是 LoS 的起点,最高值是最远的。对于这些点中的每一个,我想确定是否有任何点具有较低的 id,它也具有较高的音高(度)。如果是这样的话,那就看不到重点了。
我一直在努力寻找解决方案。我已经尝试使用递归查询,如下面的 SQL:
WITH RECURSIVE
walk_points AS
(
SELECT ARRAY[id] AS idlist,geom,degrees,id
FROM pitch_at_point
WHERE degrees = (SELECT max(degrees) FROM pitch_at_point)
UNION ALL
SELECT array_append(w.idlist, n.id) AS idlist,n.geom,n.degrees,n.id
FROM pitch_at_point n, walk_points w
WHERE n.degrees < any(SELECT n.degrees FROM pitch_at_point WHERE NOT
w.idlist @> ARRAY[n.id])
)
SELECT * FROM walk_points
我希望得到所有点的返回,这些点前面有更高的点,但我只得到一个点的结果,即使我使用 WHERE n.degrees > any( 也总是相同的点。
我很难弄清楚 PostgreSQL 递归 CTE,所以如果有人可以帮助我,我将不胜感激。
【问题讨论】:
-
注意:Postgres 递归查询需要
RECURSIVE关键字。 -
好的,我会编辑我的问题
标签: sql postgresql postgis