简体   繁体   English

选择加入查询中的最新记录

[英]pick latest record in join query

Below is my query to update manager field in one table. 下面是我在一个表中更新管理器字段的查询。 The problem I am facing is I want to pick the user (NRH.AffectedUserNumber) with lastest start date in RH Table. 我面临的问题是我想在RH表中选择具有最新开始日期的用户(NRH.AffectedUserNumber)。

WITH [NewReqHeader]
AS
(SELECT ROW_NUMBER() 
           OVER(ORDER BY RH.StartDate DESC) AS rowid
          , RH.RequestId
          , RH.RequestType
          , RH.RequestStatusID
          , RH.AffectedUserNumber
          , RPD.TaskId
          , RPD.HotelID
          , RH.StartDate
      FROM DBO.RequestPermissionDetail RPD
           JOIN DBO.RequestHeader RH ON  RH.RequestId = RPD.RequestId
                    AND RH.RequestType = 2
                    AND RH.RequestStatusID = 20
                    AND RPD.TaskId = 923
)
UPDATE #Facility_Manager
SET    Manager = NRH.AffectedUserNumber
FROM   #Facility_Manager FM
       LEFT OUTER JOIN [NewReqHeader] NRH ON  FM.FacilityId = NRH.HotelID
                AND ISNULL(FM.FacilityId ,'') != ''
WHERE  FM.SecPermissionCount > 1

You will need to add a PARTITION BY clause to the ROW_NUMBER function to get a count by each HotelID. 您需要将一个PARTITION BY子句添加到ROW_NUMBER函数以获取每个HotelID的计数。
Then just limit the WHERE clause to 然后将WHERE子句限制为

WHERE  FM.SecPermissionCount > 1 AND NRH.rowid = 1
update fm
set 
  Manager = (
    select top 1 AffectedUserNumber
    from 
    NewReqHeader nrh
    where fm.FacilityID = nrh.HotelID
    order by StartDate desc
  )
from 
#Facility_Manager fm
where
SecPermissionsCount > 1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM