postgresql中的滚动求和以及上一行和下一行

postgresql中的滚动求和以及上一行和下一行,postgresql,Postgresql,我正在开发道路标志的数据模型 标志放置在一个框架内的一个杆位上,以规定的方位角。 同一帧中可以有多个符号,然后它们按顺序排列。 这些标志有一定的高度 id | location | angle | frame | rank | height ----+----------+-------+-------+------+--------- 1 | 1 | 45 | 1 | 1 | 100 2 | 1 | 45 |

我正在开发道路标志的数据模型

标志放置在一个框架内的一个杆位上,以规定的方位角。 同一帧中可以有多个符号,然后它们按顺序排列。 这些标志有一定的高度

 id | location | angle | frame | rank | height  
----+----------+-------+-------+------+---------
  1 |        1 |    45 |     1 |    1 |    100 
  2 |        1 |    45 |     1 |    2 |    100 
  3 |        1 |    90 |     1 |    1 |    110 
  4 |        1 |    90 |     2 |    1 |    120 
  5 |        1 |    90 |     2 |    2 |    130 
  6 |        1 |    90 |     2 |    3 |    140 
  7 |        2 |    15 |     1 |    1 |    100 
  8 |        2 |    15 |     1 |    2 |    100 
  9 |        2 |    15 |     2 |    1 |    100 
 10 |        2 |    60 |     1 |    1 |    100 
 11 |        2 |    60 |     1 |    2 |    100 
 12 |        2 |    60 |     2 |    1 |    100 
我要做的第一件事是计算同一位置的最终秩,并按角度分组:按帧排序,然后按秩排序

我还计算了由相同角度上的所有其他标志确定的垂直偏移量,这些标志可以位于不同的帧中:这是滚动窗口:

以有序的_符号作为 选择 签署.*, 第二排 按位置划分、按帧的角度顺序、等级 最终排名 从标志 按位置、角度、框架、等级排序 选择 有序的标志。*, 滚动窗口上的总高度(作为班次) 从…起 有序符号 窗口滚动\按位置划分的窗口,无界前一行和当前行之间的角度行 按位置、角度、帧、最终秩排序; 给我

 id | location | angle | frame | rank | height | final_rank | shift 
----+----------+-------+-------+------+--------+------------+-------
  1 |        1 |    45 |     1 |    1 |    100 |          1 |   100
  2 |        1 |    45 |     1 |    2 |    100 |          2 |   200
  3 |        1 |    90 |     1 |    1 |    110 |          1 |   110
  4 |        1 |    90 |     2 |    1 |    120 |          2 |   230
  5 |        1 |    90 |     2 |    2 |    130 |          3 |   360
  6 |        1 |    90 |     2 |    3 |    140 |          4 |   500
  7 |        2 |    15 |     1 |    1 |    100 |          1 |   100
  8 |        2 |    15 |     1 |    2 |    100 |          2 |   200
  9 |        2 |    15 |     2 |    1 |    100 |          3 |   300
 10 |        2 |    60 |     1 |    1 |    100 |          1 |   100
 11 |        2 |    60 |     1 |    2 |    100 |          2 |   200
 12 |        2 |    60 |     2 |    1 |    100 |          3 |   300
现在,我缺少的是告诉每个标志,在同一帧中是否有一个标志在上面和/或下面,以及在当前帧的上面和/或下面是否有一个帧

我是否被迫创建更多滚动窗口

以下是我的想法:

以有序的_符号作为 选择 签署.*, 第二排 按位置划分、按帧的角度顺序、等级 最终排名 从标志 按位置、角度、框架、等级排序 , 按顺序移动符号 选择 有序的标志。*, 滚动窗口上的总高度(作为班次) 从…起 有序符号 窗口滚动\按位置划分的窗口,无界前一行和当前行之间的角度行 按位置、角度、帧、最终秩排序 , 前一个\u符号\u在\u帧中为 选择 已订购的\u.id, 滚动窗口上的第一个框作为框, 滚动窗口上的第一个\u值ID与\u框架中的上一个\u符号\u相同 从…起 有序符号 窗口滚动\按位置、角度、帧行1将窗口作为分区 , 下一个\u在\u框架中签名\u为 选择 已订购的\u.id, 滚动窗口上的最后一个\u值帧作为帧, 滚动窗口上的最后\u值ID作为\u框架中的下一个\u符号\u 从…起 有序符号 窗口滚动\u按位置、角度、当前行和后面1行之间的帧行划分的窗口 , 前一帧为 选择 已订购的\u.id, 滚动窗口上的第一个\u值帧与前一个\u帧相同 从…起 有序符号 窗口滚动\按位置划分的窗口,无界前一行和当前行之间的角度行 , 下一帧为 选择 已订购的\u.id, 滚动窗口上的最后一帧作为下一帧 从…起 有序符号 窗口滚动\u按位置划分的窗口,当前行和无界后续行之间的角度行 选择 有序移位符号。*, 前一个符号在前一帧中。前一个符号在前一帧中, 下一个在框中签名。下一个在框中签名, 前一帧。前一帧, 下一帧。下一帧 从…起 有序移位符号 左连接上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个已排序\u移位\u符号。id 左连接下一个下一个下一个下一个下一个下一个下一个下一个下一个下一个下一个下一个下一个下一个下一个下一个下一个下一个已排序\u移位\u符号。id 左键连接上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个上一个有序移位符号框架 在next_frame.id上左连接next_frame=ordered_shift_signs.id和next_frame.next_frame!=有序移位符号框架 按位置、角度、最终排名排序; 输出

 id | location | angle | frame | rank | height | final_rank | shift | previous_sign_in_frame | next_sign_in_frame | previous_frame | next_frame 
----+----------+-------+-------+------+--------+------------+-------+------------------------+--------------------+----------------+------------
  1 |        1 |    45 |     1 |    1 |    100 |          1 |   100 |                        |                  2 |                |           
  2 |        1 |    45 |     1 |    2 |    100 |          2 |   200 |                      1 |                    |                |           
  3 |        1 |    90 |     1 |    1 |    110 |          1 |   110 |                        |                    |                |          2
  4 |        1 |    90 |     2 |    1 |    120 |          2 |   230 |                        |                  5 |              1 |           
  5 |        1 |    90 |     2 |    2 |    130 |          3 |   360 |                      4 |                  6 |              1 |           
  6 |        1 |    90 |     2 |    3 |    140 |          4 |   500 |                      5 |                    |              1 |           
  7 |        2 |    15 |     1 |    1 |    100 |          1 |   100 |                        |                  8 |                |          2
  8 |        2 |    15 |     1 |    2 |    100 |          2 |   200 |                      7 |                    |                |          2
  9 |        2 |    15 |     2 |    1 |    100 |          3 |   300 |                        |                    |              1 |           
 10 |        2 |    60 |     1 |    1 |    100 |          1 |   100 |                        |                 11 |                |          2
 11 |        2 |    60 |     1 |    2 |    100 |          2 |   200 |                     10 |                    |                |          2
 12 |        2 |    60 |     2 |    1 |    100 |          3 |   300 |                        |                    |              1 |           
我觉得有点太复杂了

我错过什么了吗