父表(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采样日期
你可以用做ROW_NUMBER
在TransDate
每个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
。
您需要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