SQL 最近从第二个表注册的 Id
Posted
技术标签:
【中文标题】SQL 最近从第二个表注册的 Id【英文标题】:SQL Most Recent Register FROM Second Table by Id 【发布时间】:2018-08-07 17:25:27 【问题描述】:我有 2 张桌子(机会和舞台)。我需要通过 StageTypeId 获得最近阶段的每个机会。
机会:ID 等 阶段:Id、CreatedOn、OpportunityId、StageTypeId。
假设我有“opportunity1”和“opportunity2”,每个都添加了许多阶段。
通过传递 StageTypeId,我需要获得具有此 StageTypeId 的最新机会。
我正在尝试以下查询,但它为所有机会复制了相同的阶段。
似乎忽略了这一行:“AND Stage.[OpportunityId] = ID”
SELECT Opportunity.[Id] ID,
Opportunity.[Name],
Opportunity.[PotentialAmount],
Contact.[FirstName],
Contact.[LastName],
(SELECT * FROM
(
SELECT Stage.[StageTypeId]
FROM Stage
WHERE Stage.[StageTypeId] = @StageTypeId
AND Stage.[OpportunityId] = ID
ORDER BY Stage.[CreatedOn] DESC
)
WHERE ROWNUM = 1) AS StageTypeId
FROM Opportunity
LEFT JOIN Contact
ON Opportunity.[ContactId] = Contact.[Id]
谢谢
【问题讨论】:
标记您正在使用的 DBMS(即mysql
、SQL Server
等)。
数据库是什么?
它是甲骨文....
【参考方案1】:
大多数 DBMS 支持fetch first
子句所以,你可以这样做:
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
);
【讨论】:
我认为有问题,StageTypeId 在 Stage 表而不是机会表中。对吗?【参考方案2】:您可以尝试以下所有 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
【讨论】:
以上是关于SQL 最近从第二个表注册的 Id的主要内容,如果未能解决你的问题,请参考以下文章