父表(tblLog)有三个字段
用户名
时间
操作
子表(tblRole)有三个字段
用户名
角色
TransDate
我希望查询为tblLog提供三个字段,为每个UserID提供tblRole的Role信息。问题是tblRole中的UserID不是唯一的,因为该表包含历史角色。所以我需要做的只包括Transid的Max的UserID和Role。我的理解是,这是直截了当的,但我不知道该怎么做。这是我要修复的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的样本日期
答案 0 :(得分:1)
您需要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]
答案 1 :(得分:1)
对于每个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
此查询将提取每个Gruntfile.js
的最新交易信息。