我无法为一个需求编写 sql 查询



在sql server表中包含train_id,station_name和Reaching_time。所以我想添加更多的列,而使用select查询。这一列是持续时间。所以第一站到达时间和第二站到达时间我们简单地减去它们就得到了持续时间。但我做不到。所以我附加了我的查询,但我得到了空值在持续时间列。请参考下面的截图。

查询:

select
t1.train_id, t1.Station_Name, t1.Reaching_Timing, DATEDIFF(MINUTE,t1.Reaching_Timing,t2.Reaching_Timing) 
from train_schudle t1
left join train_schudle t2
on t1.train_id=t2.train_id
group by t1.train_id, t1.Station_Name, t1.Reaching_Timing,t2.train_id, t2.Station_Name, t2.Reaching_Timing; 

我在持续时间列中只得到空值,所以我想在持续时间列中纠正持续时间。

tbody> <<tr>2
train_idStation_NameReaching_Timing(无列名)
1sanfraneco10:30:00.00000000
纽约12:30:00.00000000
3芝加哥td> 01:45:00.00000000

您需要LAG()窗口函数

SELECT train_id, Station_Name, Reaching_Time, 
DateDiff(minute, LAG(Reaching_time) OVER (PARTITION BY train_id ORDER BY reaching_time), Reaching_Time) Duration
FROM train_schedule

假设Reaching_time是合理的数据类型,而不是字符串/varchar列。

但注意:我会期望基于样本数据的空值,因为这些是不同的列车。如果您希望看到结果,请在一些示例数据行中使用相同的train_id,这样您就可以从一站到下一站跟随同一列火车。你可以在这里看到效果:

https://dbfiddle.uk/tTqKnXqS