访问select中的上一行

时间:2016-07-01 09:39:39

标签: sql teradata

我的情况如下

--source data
departuredttm        flight_source flight_destination available_seats   
13-07-2016 04:00:00     A               B               200         
13-07-2016 08:00:00     A               B               320             
13-07-2016 08:20:00     A               B               20  

我有一个查询表,告诉我们这个来源和目的地的乘客总数是多少,其航班延迟并且需要在源数据中的可用座位进行调整。查找表是这样的。

--lookup table for passenger_from_delayed_flights
flight_source  flight_destination  passengers
A              B                   500          

现在我必须像在源数据中那样调整这500名乘客的可用座位

---output
DepartureDttm        flight_source  flight_destination AVAILABLE_SEATS      PASSENGERS_TO_ADJUST            PASSENGER_LEFT
13-07-2016 04:00:00  A              B                  200                  500                             300
13-07-2016 08:00:00  A              B                  320                  300                             20
13-07-2016 08:20:00  A              B                  20                   20                              0

最初调整的乘客是500,我们有200个座位,接下来有320个座位,我们需要调整300(500-200)名乘客。

请帮忙

由于

1 个答案:

答案 0 :(得分:1)

您的预期结果可能有误,第二次飞行已经有足够的座位,因此PASSENGER_LEFT应为-20(或0)。

这是基于运行总计的计算:

passengers - SUM(available_seats)
             OVER (ORDER BY departuredttm 
                   ROWS UNBOUNDED PRECEDING) AS PASSENGER_LEFT

available_seats + PASSENGER_LEFT AS PASSENGERS_TO_ADJUST