Microsoft SQL查询 - 从第二个表返回最后一条记录

时间:2015-01-11 17:21:46

标签: sql-server greatest-n-per-group

我有2个表,我想要运行查询。第一个表格dbo.Incidents主键 IncidentID.联系。第二个表格为dbo.IncidentActions,其中包含主键 {{1并且有一个与第一个表链接的字段ActionID

有许多相同IncidentID的操作,我希望每IncidentID只返回1行,IncidentID的最后ActionID

谢谢Andomar - 几乎在那里我保证:)

IncidentID

现在一切正常我只想设置Where ia.ActionDate = GetDate() - 似乎无法正常工作

1 个答案:

答案 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子句中使用窗口函数。有关更多示例,请浏览代码。