SQL第二个表中最近的寄存器(按Id)

SQL第二个表中最近的寄存器(按Id),sql,oracle,subquery,Sql,Oracle,Subquery,我有两张桌子(机会和舞台)。我需要通过StageTypeId获得最近阶段的每个机会 机会:身份证等 阶段:Id、CreatedOn、OpportunityId、阶段Id 假设我有“机会主义1”和“机会主义2”,每一个都添加了许多阶段 通过传递StageTypeId,我需要获得这个StageTypeId是最新的机会 我正在尝试以下查询,但它为所有Opportunity复制了相同的阶段 它似乎忽略了这一行:“和{Stage}.[OpportunityId]=ID” 谢谢大多数DBMS支持先获取子句,

我有两张桌子(机会和舞台)。我需要通过StageTypeId获得最近阶段的每个机会

机会:身份证等 阶段:Id、CreatedOn、OpportunityId、阶段Id

假设我有“机会主义1”和“机会主义2”,每一个都添加了许多阶段

通过传递StageTypeId,我需要获得这个StageTypeId是最新的机会

我正在尝试以下查询,但它为所有Opportunity复制了相同的阶段

它似乎忽略了这一行:“和{Stage}.[OpportunityId]=ID”


谢谢

大多数DBMS支持
先获取
子句,因此,您可以执行以下操作:

select o.*
from Opportunity o
where o.StageTypeId = (select s.StageTypeId 
                       from Stage s
                       where s.OpportunityId = o.id
                       order by s.CreatedOn desc
                       fetch first 1 rows only
                      );

您可以尝试以下所有dbms支持的方式

   select TT*. ,o*. from
   (
   select s1.OpportunityId,t.StageTypeId from Stage s1 inner join

    (select StageTypeId,max(CreatedOn) as createdate Stage s
    group by StageTypeId
    ) t
    on s1.StageTypeId=t.StageTypeId and s1.CreatedOn=t.createdate 
   ) as TT inner join Opportunity o on TT.OpportunityId=o.id

标记您正在使用的DBMS(即,
MySQL
SQL Server
,等等)。数据库是什么?它是Oracle…我认为有问题,StageType在Stage表中,而不是opportunity表中。对吗?
   select TT*. ,o*. from
   (
   select s1.OpportunityId,t.StageTypeId from Stage s1 inner join

    (select StageTypeId,max(CreatedOn) as createdate Stage s
    group by StageTypeId
    ) t
    on s1.StageTypeId=t.StageTypeId and s1.CreatedOn=t.createdate 
   ) as TT inner join Opportunity o on TT.OpportunityId=o.id