gpt4 book ai didi

postgresql - 根据时间字段将 postgres 记录分成组

转载 作者:行者123 更新时间:2023-11-29 13:47:28 26 4
gpt4 key购买 nike

我有一个包含如下记录的表:

| id | coord-x | coord-y | time |---------------------------------|  1 |       0 |       0 | 123  ||  1 |       0 |       1 | 124  ||  1 |       0 |       3 | 125  |

time 列表示以毫秒为单位的时间。我想要做的是找到所有 coord-xcoord-y 作为给定 id 给定时间范围内的一组点。对于任何给定的 id,都有一个唯一的 coord-xcoord-ytime

然而,我需要做的是将这些点分组,只要它们相隔 n 毫秒即可。所以如果我有这个:

| id | coord-x | coord-y | time |---------------------------------|  1 |       0 |       0 | 123  ||  1 |       0 |       1 | 124  ||  1 |       0 |       3 | 125  ||  1 |       0 |       6 | 140  ||  1 |       0 |       7 | 141  |

我想要类似这样的结果:

| id | points              | start-time | end-time ||  1 | (0,0), (0,1), (0,3) |        123 |      125 ||  1 | (0,140), (0,141)    |        140 |      141 |

我确实在我的数据库上安装了 PostGIS,我在上面发布的时间并不具有代表性,但我将它们保持得较小只是作为示例,time 只是一个毫秒时间戳。

最佳答案

棘手的部分是在 GROUP BY 中选择表达式。如果 n = 5,您可以执行类似 time/5 的操作。为了与示例完全匹配,下面的查询使用 (time - 3)/5。将其分组后,您可以使用 array_agg 将它们聚合到一个数组中。

SELECT
array_agg(("coord-x", "coord-y")) as points,
min(time) AS time_start,
max(time) AS time_end
FROM "<your_table>"
WHERE id = 1
GROUP BY (time - 3) / 5

这是输出

+---------------------------+--------------+------------+
| points | time_start | time_end |
|---------------------------+--------------+------------|
| {"(0,0)","(0,1)","(0,3)"} | 123 | 125 |
| {"(0,6)","(0,7)"} | 140 | 141 |
+---------------------------+--------------+------------+

关于postgresql - 根据时间字段将 postgres 记录分成组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46065254/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com