需要查询有关唯一父到子,是不是唯一的,但可以制成具有独特MAX(Need query to rela

2019-10-23 18:33发布

父表(tblLog)有三个字段
用户身份
时间
行动

子表(tblRole)有三个字段
用户身份
角色
TransDate

我想查询给我从tblLog三个字段,并从tblRole每个用户ID的角色信息。 问题是,因为该表中包含的历史角色的用户ID在tblRole不是唯一的。 因此,我需要做的是只包含了TransDate的最大用户ID和角色。 我的理解是,这是直截了当的,但我不知道该怎么做。 下面是我试图修复SQL:

SELECT L.[ID]
      ,L.[UserID]
      ,L.[Time]
      ,L.[Action]
      ,R.Role
  FROM [TEST111].[dbo].[tblLog] as L
  Join [TEST111].[dbo].[tblRole] as R
  On  L.[UserID] = R.[UserID]

下面是从tblRole *样本数据:

 ID UserID Role TransDate 1 U001 Super 1/1/2015 2 U001 Super 2/15/2015 3 U001 Mgr 3/7/2015 4 U002 Line 2/10/2015 5 U002 Super 5/4/2015 6 U004 Mgr 4/4/2015 7 U005 Super 1/15/2015 

*我之前曾表示,这是从tblLog采样日期

Answer 1:

你可以用做ROW_NUMBERTransDate每个UserId

;With Cte As
(
    Select  L.[ID],
            L.[UserID],
            L.[Time],
            L.[Action],
            R.[Role],
            Row_Number() Over (Partition By [L].[UserId] Order By [R].[TransDate] Desc) Row_Number
    From    [TEST111].[dbo].[tblLog]    as L
    Join    [TEST111].[dbo].[tblRole]   as R    On  L.[UserID] = R.[UserID]
)
Select  [Id], [UserId], [Time], [Action], [Role]
From    Cte
Where   [Row_Number] = 1

该查询将拉动对每个最新的交易信息, UserId



Answer 2:

您需要GROUP BY您确定值的字段,然后添加MAX骨料您要分析的价值。

SELECT 
    L.[UserID]
    R.[Role],
    MAX(L.[TransDate]) AS [MaxDate]
FROM [TEST111].[dbo].[tblLog] L
    INNER JOIN [TEST111].[dbo].[tblRole] R
        ON L.[UserID] = R.[UserID]
GROUP BY
    L.[UserID]
    R.[Role]


文章来源: Need query to relate unique parent to child that is not unique but can be made unique with MAX