航空数据库SQL查询:如何编写查询各机场出发最早航班详情的语句?
航班表查询解决方案
前提说明
- 航班表表名默认为
flights departure字段为DateTime类型,存储航班实际起飞时间airport_name字段对应出发机场的官方名称- 若同机场存在多个完全相同最早起飞时间的航班,两种写法都会全部返回,符合业务查询要求
支持窗口函数的数据库通用写法(适配MySQL 8.0+/PostgreSQL/SQL Server/Oracle)
性能更优、逻辑可读性更强,是当前主流写法:
WITH ranked_flights AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY airport_name ORDER BY departure ASC) AS rn FROM flights ) SELECT flight_id, flight_no, departure, arrival, airport_name FROM ranked_flights WHERE rn = 1;
如果需要保留同机场同最早起飞时间的所有航班,把上述代码中的
ROW_NUMBER()替换为RANK()即可。
低版本数据库兼容写法(适配MySQL 5.x等不支持窗口函数的环境)
SELECT f.* FROM flights f INNER JOIN ( SELECT airport_name, MIN(departure) AS earliest_departure FROM flights GROUP BY airport_name ) t ON f.airport_name = t.airport_name AND f.departure = t.earliest_departure;
内容的提问来源于stack exchange,提问作者sumit desai
相关产品推荐
相关产品推荐

