我有2个表,我想要运行查询。第一个表格dbo.Incidents
与主键 IncidentID.
联系。第二个表格为dbo.IncidentActions
,其中包含主键 {{1并且有一个与第一个表链接的字段ActionID
。
有许多相同IncidentID
的操作,我希望每IncidentID
只返回1行,IncidentID
的最后ActionID
。
谢谢Andomar - 几乎在那里我保证:)
IncidentID
现在一切正常我只想设置Where ia.ActionDate = GetDate() - 似乎无法正常工作
答案 0 :(得分:1)
如果您只是为每个事件寻找最高ActionID
:
select i.IncidentID
, max(ia.ActionID) as MaxActionIdForIncident
from Incidents i
join IncidentActions ia
on i.IncidentID = ia.IncidentID
group by
i.IncidentID
如果IncidentActions
表有一个时间戳列,您想用它来确定要返回的行,您可以使用row_number()
窗口函数:
select *
from (
select i.IncidentID
, ia.ActionID
, ia.ActionByUser -- Note: now you return any column
, row_number() over (
partition by i.IncidentID
order by ia.ActionTimestamp desc) as rn
from Incidents i
join IncidentActions ia
on i.IncidentID= ia.IncidentID
) as SubQueryAlias
where rn = 1 -- Latest action per incident only
子查询是必需的,因为您无法在where
子句中使用窗口函数。有关更多示例,请浏览greatest-n-per-group代码。