postgresql

时间:2017-11-30 21:15:09

标签: sql postgresql

地铁数据 列:

  1. Station_id(1,2,3,4,5,6,7,8,1,2,3,4,5,1,2,3,4,5,6,7,1,2,3 )
  2. 登船人数
  3. 已启用的人数
  4. 占有
  5. 当前站的占用率=上一站火车已有人数+登机人数 - 已启用人数

    我正在尝试填写占用列。问题是数据集是针对多个地铁列车的,因此station_id变回1,并且在该站点,被解除的人数始终是0,因为它是火车旅程开始的站点。我不知道如何在postgresql中做到这一点。下面示例图片中的占用列为空,需要填写

    对列车行程进行分类和分组。 enter image description here

1 个答案:

答案 0 :(得分:2)

您可以使用累积总和的差异来执行此操作。诀窍在于通过计算station_id已经1到该记录的次数来识别我所做的组。

select s.*,
       (sum(boarded) over (partition by grp order by id) -
        sum(deboarded) over (partition by grp order by id)
       ) as occupants
from (select s.*,
             count(*) filter (where station_id = 1) over (order by id) as grp
      from subwaydata s
     ) s;