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