【发布时间】: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