ORACLE SQL:关联子查询,用于每年以最快的最短时间运动员获得竞争类中的个人详细信息

我意识到这可能是获取每列最大值的一种方式,但是我对ORACLE SQL还是比较陌生,我似乎无法使其正常工作。

我有两个表:比赛时间和参赛者,我正在尝试进行选择查询,如果他们在特定比赛中表现最好,则将打印出参赛者表中的个人信息,例如姓名和电子邮件地址。 )。

参与者(参与者,姓名,电子邮件和电话都是Varchar2)

|PARTICIPANT | NAME | EMAIL   | PHONE |
|P1          | Sam  | x@yahoo | 123.. |
|P2          | Jerry| y@gmail | 456.. |
|P3          | Mike | z@gmail | 789...|
...

Competition_Times(年份是数字(4,0),类型和参与者是varchar2,时间是日期(但是DD-MON-YYYY固定为1970年1月1日,所以只有小时和分钟很重要)

|YEAR        | TYPE      | PARTICIPANT | TIME |
|2020        | Comp 1    | P1          | 20:40|
|2020        | Comp 2    | P1          | 24:30|
|2020        | Comp 1    | P2          | 21:40|
|2020        | Comp 1    | P3          | 18:24|
|2019        | Comp 1    | P1          | 25:00|
|2019        | Comp 1    | P3          | 25:39|
|2019        | Comp 2    | P1          | 22:00|
|2019        | Comp 1    | P2          | 22:50|
....

例如: 在2020年的comp 1中,我希望与ID为P3的参与者联系,在2019年的comp 1中,我期望与ID为P2的参与者联系。

YEAR | TYPE  | NAME | EMAIL
2020 | Comp 1| Mike | z@gmail
2019 | Comp 1| Jerry| y@gmail

我意识到这将需要一个将比赛年份传递到内部查询的外部查询,但是即使经过多次类似性质的问题的答复,我似乎也无法弄清楚。

这是我正在使用的当前代码:

SELECT YEAR,TYPE,NAME,EMAIL
FROM COMPETITION_TIMES,PARTICIPANTS
WHERE
(SELECT * FROM COMPETITION_TIMES WHERE TYPE = 'Comp 1' AND ROWNUM = 1 ORDER BY TIME ASC)

如果有人能指出我应该如何利用相关子查询,或者让我指出围绕这样的问题的类似问题,将不胜感激!

q306400986 回答:ORACLE SQL:关联子查询,用于每年以最快的最短时间运动员获得竞争类中的个人详细信息

您可以通过多种方式获得参与者编号。一个使用相关的子查询:

select ct.*
from competition_times ct
where ct.time = (select min(ct2.time)
                 from competition_times ct2
                 where ct2.year = ct.year and
                       ct2.type = ct.type
                );

您可以使用join或类似的机制来获取有关参与者的其余列。

本文链接:https://www.f2er.com/2919921.html

大家都在问