SQL:获取最大列值对应的列值

SQL:获取最大列值对应的列值,sql,oracle,greatest-n-per-group,Sql,Oracle,Greatest N Per Group,我有下表 我的桌子 Id | S_Id | T_Id | 1 | 1 | abc | 2 | 2 | abc | 3 | 3 | abc | 4 | 4 | abc | 5 | 1 | xyz | 6 | 2 | xyz | 7 | 3 | xyz | 我还有一张桌子,另一张桌子 P_Id | Name | Id | 1 | pqr | 4 | 2 | stu | 4 |

我有下表

我的桌子

Id | S_Id |  T_Id |
1  | 1    |  abc  |
2  | 2    |  abc  |
3  | 3    |  abc  |
4  | 4    |  abc  |
5  | 1    |  xyz  |
6  | 2    |  xyz  |
7  | 3    |  xyz  |
我还有一张桌子,另一张桌子

  P_Id | Name |  Id |
    1  | pqr  |  4  |
    2  | stu  |  4  |
    3  | mvc  |  4  |
    4  | yxf  |  3  |
我将有T_Id作为输入,例如:abc。我需要一个查询来选择具有最大S_Id(即4)的行的Id,并与另一个表联接,结果是:

Id | S_Id |  T_Id |  P_Id | Name | 
4  | 4    |  abc  |  1    | pqr  | 
4  | 4    |  abc  |  2    | stu  |  
4  | 4    |  abc  |  3    | mvc  |  
感谢您的帮助。

如果您使用的是11g或之前的版本,请使用
rank()
窗口功能

select id
  from (
   select id, rank() over (partition by T_Id order by S_Id desc) as rn
     from myTable
    where T_Id = 'abc') t
where t.rn = 1;
在12c上,您可以使用
fetch

select id
  from myTable
 where T_Id = 'abc'
order by S_Id desc
fetch first 1 row;
根据您的新需求使用Join

select t.Id, t.S_Id, t.T_Id, t1.P_Id, t1.Name
  from (
   select id, S_id, t_id rank() over (partition by T_Id order by S_Id desc) as rn
     from myTable
    where T_Id = 'abc') t join AnotherTable t1 on t.id = t1.P_id
where t.rn = 1;

谢谢它起作用了。但除了排名,还有其他选择吗。因为我希望它在需要时在每个数据库上运行。@SonamDaultani每个Oracle数据库?我认为Rank()从8i开始工作,我指的是所有oracle版本。我检查了它是否适用于8i以上的所有版本。感谢您的建议。
rank()
vs
fetch first
的结果可能会有所不同,如果最大
S\u Id
的结果相同(如果
S\u Id
可能有重复项,否则这不是问题)。如果可以重复,并且您确实只需要一行,则可以使用
行数()
而不是
秩()
(例如,对于标量子查询)。@vercelli我的要求已更改。你能调查一下吗。