表格"参与者":
| 点接受点标识|目标接受点名称|brt_dt|
| - ------|- ------|- ------|
| 1个|安娜·佩雷斯|二○ ○一年十月十日|
| 第二章|施若望|一九九九年四月三日|
| 三个|朱迪·安|二○ ○一年十月十日|
表格"人种":
| 种族标识|种族名称|种族_日期|
| - ------|- ------|- ------|
| 1个|呜呜呜|2023年1月1日|
| 第二章|速度与激情|2022年1月1日|
表"个体_人种_记录":
| 内部资源标识|点接受点标识|种族标识|运行时间|
| - ------|- ------|- ------|- ------|
| 1个|1个|1个|00时59分13秒|
| 第二章|1个|第二章|01时19分14秒|
| 三个|第二章|1个|00时48分05秒|
| 四个|第二章|第二章|01时01分17秒|
| 五个|三个|第二章|01时31分18秒|
我想为每个比赛项目选择最年轻参赛者的姓名和年龄,以及每个比赛项目的名称和年份。
这是我目前掌握的情况:
SELECT
r.race_name,
EXTRACT(YEAR FROM r.race_date) AS year,
COALESCE(CAST(min.age AS varchar), 'N/A')
FROM(
SELECT
race_id,
EXTRACT(YEAR FROM MIN(AGE(brt_dt))) AS age
FROM(
SELECT p.ptcpt_id, p.brt_dt, irr.race_id
FROM participant p
INNER JOIN individual_race_record irr
ON p.ptcpt_id = irr.ptcpt_id
) sub
GROUP BY race_id
) min
RIGHT JOIN race r ON r.race_id=min.race_id
ORDER BY year DESC
这导致下表:
| 种族名称|年份|年龄|
| - ------|- ------|- ------|
| 呜呜呜|二○二三|二十一|
| 速度与激情|小行星2022|二十一|
但我想要的是:
| 种族名称|年份|年龄|目标接受点名称|
| - ------|- ------|- ------|- ------|
| 呜呜呜|二○二三|二十一|安娜·佩雷斯|
| 速度与激情|小行星2022|二十一|安娜·佩雷斯|
| 速度与激情|小行星2022|二十一|朱迪·安|
问题是我无法将它与参赛者表连接起来。我还需要另一列来记录最年轻参赛者的姓名。如果一场比赛中有多个最年轻的参赛者,我想把它们都显示出来。当我尝试为'min'表选择ptcpt_id时,它导致了一个错误,提示我必须在GROUP BY函数下也包含ptcpt_id。I don "我不需要按参与者分组。
我将非常感谢在这个问题上的任何帮助和线索。谢谢。
1条答案
按热度按时间ee7vknir1#
您可以使用
FETCH FIRST ROWS WITH TIES
来收集与第一个ORDER BY
字段相关的所有记录。也就是说,如果我们使用DENSE_RANK
根据年龄为每个种族的每个人分配一个排名,它将允许获得每个种族中年龄最小的所有人。由于我们使用DENSE_RANK
,如果年龄最小的人不止一个,它将检索所有人。输出:
| 种族名称|年份|年龄|目标接受点名称|
| - ------|- ------|- ------|- ------|
| 速度与激情|小行星2022|二十一|安娜·佩雷斯|
| 速度与激情|小行星2022|二十一|朱迪·安|
| 呜呜呜|二○二三|二十二|安娜·佩雷斯|
检查here演示。