我正在研究PostgreSQL
数据库,该数据库中的汽车追踪数据与此类似。
+--------+-------+---------+------------+
| car_id | trip | speed | Segment |
+--------+-------+---------+------------+
| 1 | 1 | 82 | s1 |
| 1 | 1 | 81 | |
| 1 | 1 | 85 | s1 |
| 1 | 2 | 82 | s1 |
| 1 | 2 | 76 | s2 |
| 2 | 3 | 80 | s1 |
| 2 | 3 | 84 | s2 |
| 2 | 3 | 83 | s2 |
+--------+-------+---------+------------+
每辆车都有特定的car_id
,并且trip
会根据该car_id
进行更改,或者日期时间的更改大于5秒。对于每个数据点,都会注册speed
,以及轨道属于哪条路(segment
)。
我想得到一个表格,其中每个speed
的每个trip
都显示最大segment
。如果可能,还应显示car_id
。它应该看起来像这样:
+-------+----------+------+------+
| trip | car_id | s1 | s2 |
+-------+----------+------+------+
| 1 | 1 | 85 | |
| 2 | 1 | 82 | 76 |
| 3 | 2 | 80 | 84 |
+-------+----------+------+------+
我尝试使用group by
,但无法正常使用。如果有人可以提供帮助,我将不胜感激。
答案 0 :(得分:0)
我认为这只是条件聚合:
select trip_id, car_id,
max(speed) filter (where segment = 's1') as s1,
max(speed) filter (where segment = 's2') as s2
from t
group by trip_id, car_id