【发布时间】:2021-07-23 16:07:30
【问题描述】:
假设我有一个名为位置的表,它包含源位置的记录以及记录该位置的时间。
| id | source_id | ts | position |
|---|---|---|---|
| 1 | 3134 | 2021-02-21 20:48:08.488359 | ... |
| 2 | 3134 | 2021-02-21 20:48:09.123422 | ... |
| ... | ... | ... | ... |
ts 是时间戳的缩写,位置是 postgis 格式,但对于这个问题并不重要。
我还有另一个名为 zone 的表:
| id | area |
|---|---|
| 1 | ... |
| 2 | ... |
| ... | ... |
该区域是一个 postgis 格式的多边形。
例如,我可以测试一个点是否在一个区域中
SELECT locations.source_id, zones.id, locations.ts
from locations inner join
zones
on ST_Contains(zones.area, locations.position);
会在什么时候告诉我哪个来源在哪个区域。
我想要的是产生以下输出的查询:
| locations.source_id | zones.id | in_zone_time |
|---|---|---|
| 3134 | 1 | 1 mins |
| 3134 | 2 | 4 mins |
| 3134 | 1 | 2 mins |
| ... | ... | ... |
所以它会告诉我源 3134 在区域 1 中持续了 1 分钟,之后它在区域 2 中持续了 4 分钟,然后又在区域 1 中持续了 2 分钟。
这种方式如何实现聚合?
【问题讨论】:
标签: sql postgresql postgis aggregation