我是Neo4j的初学者,如何计算从A1到A3的航班持续时间。 我对到达和离开航班上的减法操作感到困惑。我想计算从A1到A3机场的总时间。这是我的控制台http://console.neo4j.org/?id=g0mv8x
非常感谢您的合作!
答案 0 :(得分:3)
这个有点棘手。首先查询,然后解释:
MATCH p=shortestPath((a1:AIRPORT { name: "Airport A1" })-[*]-(a3:AIRPORT { name: "Airport A3" }))
RETURN reduce(totalDuration=0, duration IN
extract(leg IN relationships(p)| leg.duration) |
totalDuration + toInt(duration));
首先,你需要找到两者之间的最短路径。那是第一行。有很多路径,一般来说你想要最便宜/最短路径。
其次,你有一条路。所以你需要做的第一件事就是获得所有"持续时间"出于关系。这是extract(leg IN relationships(p)| leg.duration)
的作用。 Extract从集合中抽出一些东西。最后,你需要总结它们。这是reduce
的作用。请注意,您的持续时间是字符串(它们应该是数字),因此您必须使用toInt()
才能将其转换为您可以总结的数字。
答案 1 :(得分:3)
这确实很棘手,因为你甚至不应该使用duration
属性来进行计算!
这是因为多程航班在航班之间总是有一些滞后时间,在计算总航班时间时需要考虑。因此,您需要从第一站的出发时间中减去最后一段的到达时间。
根据您的示例数据时间戳和持续时间值来判断,您的时间戳似乎以小时为单位乘以100.警告:只有时间戳包含日期信息才能进行计算,因为航班支路可以跨越多天。 / p>
以下是如何获得从A1到A3的所有实际航班,以及每条航线的起点/终点机场名称和航班代码:
MATCH (a:AIRPORT { name:"Airport A1" })-[c:Connect*]->(b:AIRPORT { name:"Airport A3" })
WHERE ALL(i IN RANGE(0, LENGTH(c)-2) WHERE (c[i+1]).dptrTime - (c[i]).arrvTime > 33)
RETURN a.name AS from, b.name AS to,
EXTRACT(x IN c | x.flightcode) AS flights,
(LAST(c).arrvTime - HEAD(c).dptrTime)/100.0 AS duration;
为了确保有效和实用的行程,WHERE
子句过滤掉每条腿之间至少20分钟(33%的小时)的行程。
+-----------------------------------------------------------+
| FROM | to | flights | duration |
+-----------------------------------------------------------+
| "Airport A1" | "Airport A3" | ["F2","F4"] | 4.0 |
| "Airport A1" | "Airport A3" | ["F1","F3"] | 5.0 |
| "Airport A1" | "Airport A3" | ["F5","F6","F7"] | 216.0 |
+-----------------------------------------------------------+
注意:216.0
小时的持续时间来自原始样本数据中23000
的到达时间。这可能是一个错字,但我保持不变。
您可以修改上述查询以获得最快的行程:
MATCH (a:AIRPORT { name:"Airport A1" })-[c:Connect*]->(b:AIRPORT { name:"Airport A3" })
WHERE ALL(i IN RANGE(0, LENGTH(c)-2) WHERE (c[i+1]).dptrTime - (c[i]).arrvTime > 33)
RETURN a.name AS FROM , b.name AS to, EXTRACT(x IN c | x.flightcode) AS flights,(LAST(c).arrvTime-HEAD(c).dptrTime)/100.0 AS duration
ORDER BY duration
LIMIT 1;
结果:
+------------------------------------------------------+
| FROM | to | flights | duration |
+------------------------------------------------------+
| "Airport A1" | "Airport A3" | ["F2","F4"] | 4.0 |
+------------------------------------------------------+