2017-04-19 19 views
0

鉴于Flight表:由于航班的数据库,找到最长飞行时间的目的地每个起点城市

​​

我需要找到,每个城市,目的地(S)与最长飞行时间

我很难与子查询。

我尝试:

SELECT DISTINCT origin_city, dest_city, MAX(actual_time) 
GROUP BY origin_city 

但我知道这是错误的。任何指导表示赞赏

+0

您的尝试对于SQLite 3.7.11或更高版本(DISTINCT是多余的)是正确的。但是对于什么数据库你真的想要答案? –

回答

-1
$sql = "SELECT MAX(actual_time) FROM FLIGHTS WHERE origin_city=xxxxx"; 
$result = $conn->query($sql); 


while($row = $result->fetch_assoc()) { 
    echo $row["dest_city"]; 
} 

将上面的代码包装在一个循环中,因为你需要每个起源城市的目的地城市。

+0

这并不能提供航班时间最长的目的地城市。 –

+0

感谢您的回应,但我确定这不是我们在课堂上学习的SQLite。这个解决方案应该用查询和子查询来完成。不为循环 – dev74

0

这将产生一个起源城市的列表,目的地城市的航班时间最长。

编辑:新增GROUP BY主查询,ORDER BY /限制子查询消除重复origin_cities。

SELECT 
    f.`origin_city`, 
    f.`origin_state`, 
    f.`dest_city`, 
    f.`desc_state`, 
    f.`actual_time` 
FROM (
    SELECT 
     `origin_city`, 
     `origin_state`, 
     max(`actual_time`) as `max_time` 
    FROM `Flights` 
    GROUP BY `origin_city`,`origin_state` 
    ORDER BY `max_time` DESC) a 
JOIN `Flights` f 
ON f.`origin_city` = a.`origin_city` 
    AND f.`origin_state` = a.`origin_state` 
    AND f.`actual_time` = a.`max_time` 
GROUP BY f.`origin_city`,f.`origin_state` 
+0

谢谢。你知道我如何删除同一来源/目的地城市对的重复项吗? – dev74

+0

请参阅编辑答案。 –

+0

所以我使用Azure和LIMIT不起作用。你知道如何用TOP替换这个声明吗? – dev74