mysql - 从两个表创建一个临时表,选择特定日期之前的最新日期
问题描述
我有以下两张表
飞行表
| passenger_id | flight_date | flight_number | destination |
| -------------| ---------- | -------------- | ------------ |
| 1234 | 2020-12-16 | 534 | CA |
| 1234 | 2020-12-29 | 876 | FL |
| 1234 | 2020-11-13 | 938 | FL |
| 5678 | 2020-12-27 | 986 | MN |
| 5678 | 2020-11-19 | 347 | WA |
乘客桌
| passenger_id | company_name | phone_number |
| -------------| ------------ | ------------ |
| 1234 | Verizon | (555) 874-9232 |
| 5678 | AT&T | (555) 867-5309 |
我想创建一个临时表,其中包含两个表中的特定列,但仅包含 FlightTable 中每个乘客的最新 flight_date 发生在 2020-12-28 之前的行。结果表应如下所示:
临时表
| passenger_id | company_name |flight_number | destination |
| -------------| ------------ |------------ | ------------ |
| 1234 | Verizon |534 | CA |
| 5678 | AT&T |986 | MN |
我尝试了以下查询但没有成功:
CREATE TEMPORARY TABLE TempTable AS (
SELECT F.passenger_id, P.company_name, flight_number, destination
FROM FlightTable AS F, PassengerTable AS P
WHERE '2020-12-28' <= MAX(flight_date) AND F.passenger_id = P.passenger_id
);
如何修改它以按预期工作?
解决方案
一个选项使用子查询:
select p.passenger_id, p.company_name, f.flight_number, f.destination
from passenger p
inner join flight f on f.passenger_id = p.passenger_id
where f.flight_date = (
select max(f1.flight_date)
from flight f1
where f1.passenger_id = f.passenger_id and f1.flight_date < '2020-12-28'
)
或者,您可以使用窗口函数:
select p.passenger_id, p.company_name, f.flight_number, f.destination
from passenger p
inner join (
select f.*,
rank() over(partition by passenger_id order by flight_date desc) rn
from flight f
where flight_date < '2020-12-28'
) f on f.passenger_id = p.passenger_id
where rn = 1
推荐阅读
- javascript - 如何放置适合整个页面的按钮?
- html - Bootstrap4对齐列
- javascript - Sweetalert2 textarea 输入显示在电子邮件中
- javascript - 未捕获的类型错误:无法读取未定义的属性“翻译”
- c# - UWP 中的系统声级
- sql - 如何在 PostgreSQL 中列出项目和计数(*)
- laravel - 未找到 Laravel 中间件类“App\Http\Middleware\CheckAuth”
- angular - 角。寻求有关解决与 AuthGuard 和指令一起使用的同步调用问题的帮助
- java - @QueryParam 仅限制 URL 中的一个值
- java - 语言级别 7 不支持增强的“开关”块 - Android Studio