对于每一行,查找以前的行是否包含更高的值

乔纳斯·佩德森(JonasPedersen)

我正在尝试在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,所以如果有人可以按我的方式帮助我,我将不胜感激。

亚历克斯

这听起来像可以使用窗口函数来解决。

对于先前度数字段(按id排序)大于当前行的度数的记录,这将为您提供true / false标志:

    case  when degrees < max( degrees ) over( 
            order by id 
            rows between unbounded preceding and 1 preceding 
          ) 
          then true 
          else false 
    end as higher_value_present

在此处查看SQLfiddle:http ://sqlfiddle.com/#!15/23196/1

从您的问题中,我不清楚您是否要将此逻辑应用于每个几何点的一组ID?在这种情况下,您可以按geom对窗口函数进行分区:

    case  when degrees < max( degrees ) over( 
            partition by geom
            order by id 
            rows between unbounded preceding and 1 preceding 
          ) 
          then true 
          else false 
    end as higher_value_present

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

对于每一行,哪些列包含值

来自分类Dev

对于每一行,查找列中具有相同值的所有行

来自分类Dev

对于每一行,查找最接近指定值的列

来自分类Dev

对于包含数据的每一行,每个类别都需要一行

来自分类Dev

在每一行中查找唯一值

来自分类Dev

在每一行中查找重复的值

来自分类Dev

对于数据框中的每一行,查找另一个数据框中是否有“关闭”行

来自分类Dev

对于每一行,列出销售额的总和以及销售额更高的人的平均值

来自分类Dev

jquery - 对于包含字符串禁用按钮的每一行

来自分类Dev

通过单击每一行中的按钮来查找每一行中文本框的值?

来自分类Dev

从每一行的第一行打印值

来自分类Dev

用以前的值加上当前值更新每一行

来自分类Dev

对于每一行,返回列索引和非NA值的名称

来自分类Dev

查找逻辑矩阵的每一行是否至少有一个TRUE

来自分类Dev

查找逻辑矩阵的每一行是否至少有一个TRUE

来自分类Dev

对于每一行,保存到json

来自分类Dev

Firebird“对于每一行”触发语法

来自分类Dev

如何与熊猫循环:“对于文件中的每一行,对于每一行中的列”

来自分类Dev

在Pandas DataFrame的每一行中查找第一个非零值

来自分类Dev

data.frame:在每一行中查找值的最后一个索引

来自分类Dev

给定尺寸为26 * 7的图像是否可能在Mat的每一行中包含78个单独的颜色值,而另一行可以包含77个颜色值?

来自分类Dev

如何查找多列中的每一行中是否都存在NA?

来自分类Dev

优化 - 返回数组中小于单元格值的第一个值(对于每一行)

来自分类Dev

跳过一行而不是“对于rng.Rows中的每一行”的VBA代码

来自分类常见问题

查找具有每一行最大值的列名

来自分类Dev

在2D数组C ++中查找每一行的最大值

来自分类Dev

在python数据框中的每一行中查找最大值

来自分类Dev

在每一行中查找最接近的列值-Pandas

来自分类Dev

numpy:在ndarray的每一行中查找第二高的值的索引

Related 相关文章

  1. 1

    对于每一行,哪些列包含值

  2. 2

    对于每一行,查找列中具有相同值的所有行

  3. 3

    对于每一行,查找最接近指定值的列

  4. 4

    对于包含数据的每一行,每个类别都需要一行

  5. 5

    在每一行中查找唯一值

  6. 6

    在每一行中查找重复的值

  7. 7

    对于数据框中的每一行,查找另一个数据框中是否有“关闭”行

  8. 8

    对于每一行,列出销售额的总和以及销售额更高的人的平均值

  9. 9

    jquery - 对于包含字符串禁用按钮的每一行

  10. 10

    通过单击每一行中的按钮来查找每一行中文本框的值?

  11. 11

    从每一行的第一行打印值

  12. 12

    用以前的值加上当前值更新每一行

  13. 13

    对于每一行,返回列索引和非NA值的名称

  14. 14

    查找逻辑矩阵的每一行是否至少有一个TRUE

  15. 15

    查找逻辑矩阵的每一行是否至少有一个TRUE

  16. 16

    对于每一行,保存到json

  17. 17

    Firebird“对于每一行”触发语法

  18. 18

    如何与熊猫循环:“对于文件中的每一行,对于每一行中的列”

  19. 19

    在Pandas DataFrame的每一行中查找第一个非零值

  20. 20

    data.frame:在每一行中查找值的最后一个索引

  21. 21

    给定尺寸为26 * 7的图像是否可能在Mat的每一行中包含78个单独的颜色值,而另一行可以包含77个颜色值?

  22. 22

    如何查找多列中的每一行中是否都存在NA?

  23. 23

    优化 - 返回数组中小于单元格值的第一个值(对于每一行)

  24. 24

    跳过一行而不是“对于rng.Rows中的每一行”的VBA代码

  25. 25

    查找具有每一行最大值的列名

  26. 26

    在2D数组C ++中查找每一行的最大值

  27. 27

    在python数据框中的每一行中查找最大值

  28. 28

    在每一行中查找最接近的列值-Pandas

  29. 29

    numpy:在ndarray的每一行中查找第二高的值的索引

热门标签

归档