【问题标题】:SQL Sub Query JOINSQL 子查询 JOIN
【发布时间】:2015-10-12 20:40:18
【问题描述】:

我有以下表格

Table 'Flight' (
number int,
dest VARCHAR(4),
arrTime Date,
Foreign Key(dest) references Airport(code)
)

Table 'Airport' (
code VARCHAR(4),
PRIMARY KEY(code)
)

假设我有以下航班数据

'Flight'
 2,'TX','10/5/2015 1:32'
 3,'NY','10/5/2015 4:20'
 1,'TX','10/5/2015 1:20'
 4,'NY','10/5/2015 4:21'

机场

'TX'
'NY'

对于每个机场,我想检索所有连续到达机场的航班号,因此它看起来很像我为航班表提供的数据。我正在处理一个子查询来执行此操作,但我无法获得所需的输出...

 1,'TX','10/5/2015 1:20'
 2,'TX','10/5/2015 1:32'
 3,'NY','10/5/2015 4:20'
 4,'NY','10/5/2015 4:21'

我尝试了以下方法,但我无法获得正确的输出

SELECT Airport.code, Timez
FROM Flight JOIN Airport
ON Flight.dest = Airport.code
ORDER BY DATE(arrTime) DESC as Timez

我们将不胜感激

【问题讨论】:

  • 按机场订购,然后按到达时间。所以它看起来像:ORDER BY Airport.code, arrTime

标签: mysql sql join


【解决方案1】:

使用ORDER BY Airport.code, Flight.arrTime

这会将同一机场的所有航班排序在一起,然后在这些组中按时间排序。

不要使用DESC,这会使它们按相反的时间顺序排列。

【讨论】:

    【解决方案2】:

    我想你希望这个得到你指定的输出:

    SELECT Flight.number n, Airport.code c, Flight.arrTime t
       FROM Flight JOIN Airport
       ON Flight.dest = Airport.code
       ORDER BY c, t DESC 
    

    无需转换 arrTime 字段,因为它已经在 DATE。

    但是,您不会获得完整的日期和时间,因为 DATE 格式的 arrTime 字段不会保留该信息。您需要一个 DATETIME 或 TIMESTAMP 字段来代替。

    【讨论】:

      【解决方案3】:

      选择 Airport.code、Flight.arrTime FROM 航班 JOIN 机场 ON Flight.dest = Airport.code ORDER BY Airport.code, Flight.arrTime ASC

      【讨论】:

        猜你喜欢
        • 2010-12-19
        • 2014-02-24
        • 2013-05-22
        • 1970-01-01
        • 2020-07-01
        • 1970-01-01
        • 2021-10-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多