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

问题描述 投票:0回答:1

我意识到这可能是获取每列最大值的一种方式,但是我对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)

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

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

sql oracle greatest-n-per-group
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.