如何创建查看两个连续记录之间的时间间隔的SQL查询

时间:2017-12-06 15:37:09

标签: sql database postgresql

如何引用查询中的上一行和下一行,以及当前的?

我有一张桌子记录从A到B的汽车旅程。结构与此类似......

CREATE TABLE journeys (
  journeyID       SERIAL,
  vehicleId       CHAR(15),               
  startTime       TIMESTAMP,              
  endTime         TIMESTAMP               
);

每一行代表一次旅程,我怎样才能找到一个旅程结束和下一个旅程开始之间的周转时间?

对于每个旅程,我希望能够引用前一行(按时间顺序排序)以建立CURR.startTime - PREV.endTime。注意 - journeyId不是顺序的,也不是按时间顺序排列的。

我尝试过自联接到同一个表的副本,但因为我无法唯一地识别后续行程,所以我最终会得到一个返回大量结果的产品查询。

(我正在使用PostGres,但如果可能的话,我更喜欢ANSI SQL解决方案)

Aaron的附录 - 我正试图获得两个记录之间的时间间隔,如果一个特定车辆ID的一个旅程结束于中午12点(结束时间),随后的旅程(对于同一车辆)从12开始:45(startTime),然后两者之间的时间间隔为45分钟。

1 个答案:

答案 0 :(得分:1)

您需要使用LAG()访问上一行的endTime。大多数DBMS都提供LAG()和类似的窗口函数(将进入MySQL 8.0)。

您的查询将如下所示:

SELECT journeyID, vehicleID, startTime, endTime, 
       startTime - LAG(endTime) over (PARTITION BY vehicleID ORDER BY startTime ASC) as timeBetweenJourneys
FROM journeys