【问题标题】:pick latest record in join query在连接查询中选择最新记录
【发布时间】:2013-05-28 12:39:09
【问题描述】:

以下是我在一个表中更新管理器字段的查询。我面临的问题是我想在 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

【问题讨论】:

    标签: sql sql-server sql-server-2008 join


    【解决方案1】:

    您需要在ROW_NUMBER 函数中添加一个PARTITION BY 子句,以按每个HotelID 获取计数。
    然后只需将 WHERE 子句限制为

    WHERE  FM.SecPermissionCount > 1 AND NRH.rowid = 1
    

    【讨论】:

    • 你能解释一下吗?
    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 2013-09-12
      • 2018-07-15
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多