根据最大值创建表

时间:2019-03-10 14:39:41

标签: sql postgresql

我正在研究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,但无法正常使用。如果有人可以提供帮助,我将不胜感激。

1 个答案:

答案 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