【发布时间】:2023-04-04 19:38:02
【问题描述】:
我正在尝试编写一个 SQL 查询,让我知道根据到达和离开时间在特定机场花费的时间。
CREATE TABLE Flights
(`ACID` varchar(6), `TIME` datetime, `STATUS` varchar(1))
;
INSERT INTO Flights
(`ACID`, `TIME`, `STATUS`)
VALUES
('XXXX', '2014-01-01 18:09:00', 'A'),
('XXXX', '2014-01-02 15:25:00', 'D'),
('XXXX', '2014-01-06 19:53:00', 'A'),
('XXXX', '2014-01-07 14:01:00', 'D'),
('XXXX', '2014-01-12 16:06:00', 'A'),
('XXXX', '2014-01-12 17:00:00', 'D'),
('YYYY', '2014-01-13 18:10:00', 'A'),
('YYYY', '2014-01-13 18:56:00', 'D'),
('XXXX', '2014-01-16 20:40:00', 'A'),
('XXXX', '2014-01-17 14:49:00', 'D'),
('ZZZZ', '2014-01-17 21:42:00', 'A'),
('ZZZZ', '2014-01-17 22:17:00', 'D'),
('XXXX', '2014-01-21 00:30:00', 'A'),
('XXXX', '2014-01-23 15:35:00', 'D')
;
状态行是“A”表示到达或“D”表示离开。
输出应汇总 ACID 字段所花费的时间(即出发时间和到达时间之间的差异)。
可能存在到达记录但没有匹配的出发记录的情况。
我很难“确定配对”,以便进行日期差异等。
RDBMS 是 MSSQL 2012
【问题讨论】:
-
哪个 dbms?如果您可以使用解析函数
LAG可能就是您想要的。 -
在这种情况下是 MSSQL 2012
-
无法将其添加为答案,因为它不完整,但也许它可以以某种方式帮助您:选择 b.time 作为出发,a.time 作为到达,(b.time-a .time) as times 从 Flights a join Flights b on a.acid = b.acid where a.status = 'A' and b.status = 'D' 它还没有处理那些 ACID 重复记录。
-
@FilipeYaBaPolido 这真的行不通...sqlfiddle.com/#!2/4ab76d/1
-
在这里工作,但它不完整,我知道。我试图指出一个方向,而不是一个完整的解决方案,如果是这样,我会发布作为答案。
标签: sql sql-server-2012