【问题标题】:How can I create a SQL query that looks at the time interval between two consecutive records如何创建查看两个连续记录之间的时间间隔的 SQL 查询
【发布时间】:2017-12-06 15:37:08
【问题描述】:

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

我有一张表来记录从 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 点(endTime)结束,而随后的旅程(对于同一辆车)从 12 点开始:45 (startTime),那么两者之间的时间间隔为 45 分钟。

【问题讨论】:

  • 答案几乎肯定是LAG(),但有点不清楚你想要什么。您能否提供一两次旅程的示例数据和预期输出?

标签: sql database postgresql


【解决方案1】:

您将需要使用LAG() 来访问上一行的endTimeLAG() 和类似的窗口函数在大多数 DBMS 中都可用(将出现在 MySQL 8.0 中)。

您的查询将如下所示:

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

【讨论】:

    猜你喜欢
    • 2017-05-02
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多