我有一个问题,我相信你的Maven可以很容易地回答:-)
从postgresql/postgis中的一个表,内容如下
ID|车|时间戳|geom|起始旗标
903 |test1| 2019 - 03 - 11 08:38:52| 0101000020E61000001D33F55| 4
904 |test1| 2019 - 03 - 11 08:39:02| 0101000020E6100000A40117B| 0
905 |test1| 2019 - 03 - 11 08:39:13| 0101000020E6100000740179C| 0
906 |test1| 2019 - 03 - 11 08:39:23| 0101000020E6100000E68013C| 0
907 |test1| 2019 - 03 - 11 08:39:34| 0101000020E610000014B1886| 0
908 |test1| 2019 - 03 - 11 08:39:44| 0101000020E61000004309E9D| 4
909 |test1| 2019 - 03 - 11 08:39:54| 0101000020E61000004C6B781| 0
910 |test1| 2019 - 03 - 11 08:40:05| 0101000020E61000002DC6658| 0
911 |test1| 2019 - 03 - 11 08:40:15| 0101000020E6100000A0B591A| 0
912 |test1| 2019 - 03 - 11 08:40:26| 0101000020E61000000E1A55E| 0
913 |test1| 2019 - 03 - 11 08:40:36| 0101000020E6100000D7DF128| 0
914 |test1| 2019 - 03 - 11 08:40:46| 0101000020E61000001C1E673| 4
915 |test1| 2019 - 03 - 11 08:40:57| 0101000020E6100000DD24068| 0
916 |test1| 2019 - 03 - 11 08:41:07| 0101000020E6100000CBE48A4| 0
917 |test1| 2019 - 03 - 11 08:41:17| 0101000020E610000093FFC9D| 0
918 |test1| 2019 - 03 - 11 08:41:28| 0101000020E61000000B3A6B0| 0
我需要所有的记录与startflag=0后(和)startflag = 4行作为路径(Postgis Linestring在geom)的时间戳顺序,直到和没有下一个startflag=4
从下一个开始标志=4,然后下一个路径,依此类推.
我试过铅和分区,但我不太了解它
2条答案
按热度按时间fjnneemd1#
和往常一样,有几种可能的方法可以获得你想要的东西。下面的SQL语句只是其中之一:
字符串
一些评论:
zbdgwd5y2#
正如所说:有更多的方法可以达到同样的结果。这一个可能有点困惑,但它的工作:
字符串
一些解释:
为什么它会起作用?
假设我们从以下记录(缩写列列表)开始:
型
显然,汽车'test1'有2个轨道,从tcid 1和4开始,因此CTE的第一部分“轨道”将导致下表(其中列“轨道”填充有新的数字序列,从1开始):
型
第二部分将(暂时)包含以下值:
型
在这个结果列表中,新创建的row_numbers再次形成了一系列连续的数字,但是原始的tcid现在在它们的序列中有了“洞”(当它们的startflag = 4时,一些记录被过滤掉了)。
一个警告:如果原始表中插入的第一条记录(无论出于何种原因)没有被标记为起始点,则此查询将创建一个linestring(为该轨道提供足够的点),但将分配一个轨道编号0。这可以在主查询中使用
WHERE track > 0
轻松消除。