【发布时间】:2021-07-22 03:22:28
【问题描述】:
我有两张桌子
飞行员
| pilot_id | first_name | last_name | status | hub |
|---|---|---|---|---|
| 1 | fname1 | lname1 | 1 | YBBN |
| 2 | fname2 | lname2 | 0 | YSSY |
| 3 | fname3 | lname3 | 1 | YMML |
| 4 | fname4 | lname4 | 1 | YBBN |
| 5 | fname5 | lname5 | 1 | EGLL |
| 6 | fname6 | lname6 | 1 | EGLL |
| 7 | fname7 | lname7 | 1 | EGLL |
| 8 | fname8 | lname8 | 1 | YPAD |
PIREPS
| pirep_id | pilot_id | date | landing_rate | accepted |
|---|---|---|---|---|
| 1 | 1 | 2021-04-01 | -113 | 1 |
| 2 | 1 | 2021-04-02 | -110 | 1 |
| 3 | 1 | 2021-04-03 | -200 | 1 |
| 4 | 2 | 2021-04-04 | -20 | 1 |
| 5 | 2 | 2021-04-05 | -120 | 1 |
| 6 | 3 | 2021-04-06 | -130 | 1 |
| 7 | 3 | 2021-04-07 | -132 | 1 |
| 8 | 4 | 2021-04-08 | -91 | 1 |
| 9 | 5 | 2021-04-09 | -64 | 1 |
| 10 | 6 | 2021-04-10 | -47 | 0 |
| 11 | 6 | 2021-04-11 | -112 | 1 |
| 12 | 7 | 2021-04-12 | -113 | 1 |
| 13 | 7 | 2021-04-13 | -201 | 1 |
| 14 | 1 | 2021-04-14 | -300 | 0 |
| 15 | 1 | 2021-04-15 | -301 | 1 |
预期结果
| pilot_id | first_name | last_name | hub | landing_rate | date | pirep_id |
|---|---|---|---|---|---|---|
| 2 | fname2 | lname2 | YSSY | -20 | 2021-04-04 | 4 |
| 5 | fname5 | lname5 | EGLL | -64 | 2021-04-09 | 9 |
| 4 | fname4 | lname4 | YBBN | -91 | 2021-04-08 | 8 |
| 3 | fname3 | lname3 | YMML | -130 | 2021-04-06 | 6 |
| 8 | fname8 | lname8 | YPAD | -301 | 2021-04-15 | 15 |
如果我只按飞行员 ID 分组并显示相关飞行员的最佳着陆率和他们完成飞行的日期,下面的代码会给我预期的输出
SELECT pi.first_name,pi.last_name,p.pirep_id,p.pilot_id,p.date,p.landing_rate
FROM qvi_pireps p
LEFT JOIN qvi_pilots pi on p.pilot_id=pi.pilot_id
INNER JOIN
(SELECT pilot_id as pil,date as da,MAX(landing_rate) AS max_landing_rate
FROM qvi_pireps
where landing_rate<0 GROUP BY pilot_id) grouppedp
ON p.pilot_id = grouppedp.pil
AND p.landing_rate = grouppedp.max_landing_rate
where pi.status=1 and
accepted=1
group by p.pilot_id ORDER BY `grouppedp`.`max_landing_rate` DESC,p.date asc limit 20
以上查询输出
| first_name | last_name | pirep_id | pilot_id | date | landing_rate |
|---|---|---|---|---|---|
| fname2 | lname2 | 4 | 2 | 2021-04-04 | -20 |
| fname5 | lname5 | 9 | 5 | 2021-04-09 | -64 |
| fname4 | lname4 | 8 | 4 | 2021-04-08 | -91 |
| fname1 | lname1 | 2 | 1 | 2021-04-02 | -110 |
| fname6 | lname6 | 11 | 6 | 2021-04-11 | -112 |
| fname7 | lname7 | 12 | 7 | 2021-04-12 | -113 |
| fname3 | lname3 | 6 | 3 | 2021-04-06 | -130 |
| fname8 | lname8 | 15 | 8 | 2021-04-15 | -301 |
当我将 group by p.pilot_id 更改为 group by pi.hub 时,我收到了独特的集线器,但是飞行员、着陆率和日期与应该是最好的不匹配
基本上,我想要实现的是获取每个飞行员的 MAX(landing_rate),其中 Pilot.status=1 & flight.accepted=1,然后按 Pilot.hub 分组以显示具有最高着陆率的最佳枢纽飞行员和他们达到着陆率的日期
任何帮助将不胜感激!
【问题讨论】:
-
您的查询缺少
select部分。还请提供一些示例数据(不是图像),并从示例数据中得到预期的结果。下面是一个很好的例子来说明 SQL 问题应该是怎样的:meta.stackoverflow.com/a/271056/460557 -
感谢您的提示!我已经采取了这些措施:)