SQL 每个用户的最新日期 - 消除重复项
SQL Lastest Date per User - Eliminating Duplicates
我研究了 30 多种不同的方法来从已加入的 table 中获取最新日期。需要专业人士的帮助。
注:
- 使用 SolarWinds 创建自定义 SQL 报告
- 对 SQL
相当陌生
我正在尝试获取所有用户的列表以及他们的用户名、主要组、名称和最新登录日期。此数据分布在两个 table 之间。
问题是我的当前代码给了我一长串具有相同日期的重复用户。我只需要一个包含最新登录日期的所有用户的列表。
这是我想出的代码,它可以毫无问题地创建我的报告,但仍然显示重复项,根本没有分组。我可以缺少什么?
SELECT
b.AccountName,
a.UserName,
b.PrimaryGroup,
b.MemberList,
a.LogonDateTime,
a.UserID
FROM UDT_UserLastActivity a
JOIN (
SELECT UserID, MAX(LogonDateTime) maxLogon
FROM UDT_UserLastActivity
GROUP BY UserID
) maxRecord
ON maxRecord.UserID = a.UserID
AND maxRecord.maxLogon = a.LogonDateTime
JOIN UDT_User b
ON b.UserID = a.UserID
ORDER BY a.LogonDateTime DESC
在此先感谢所有愿意提供帮助的人!
只需分组并搜索最大值
SELECT
b.AccountName,
a.UserName,
b.PrimaryGroup,
b.MemberList,
max(a.LogonDateTime) as LastDate,
a.UserID
FROM UDT_UserLastActivity a
JOIN (
SELECT UserID, MAX(LogonDateTime) maxLogon
FROM UDT_UserLastActivity
GROUP BY UserID
) maxRecord
ON maxRecord.UserID = a.UserID
AND maxRecord.maxLogon = a.LogonDateTime
JOIN UDT_User b
ON b.UserID = a.UserID
group by
b.AccountName,
a.UserName,
b.PrimaryGroup,
b.MemberList,
a.UserID
ORDER BY a.LogonDateTime DESC
我只需要我的所有用户及其最新登录日期的列表。
假设基本数据在用户 table 中,您只需要来自 activity table:
的 LogonDateTime
SELECT
u.AccountName,
u.UserName,
u.PrimaryGroup,
u.MemberList,
(-- Scalar subquery to get the last logon
SELECT MAX(LogonDateTime)
FROM UDT_UserLastActivity AS ula
WHERE ula.UserID = u.UserID
) AS LastLogon,
u.UserID
FROM UDT_User AS u
ORDER BY LastLogon DESC
您可以使用如上所述的分组方法,也可以只使用 DISTINCT 函数,如下所示:
SELECT DISTINCT
b.AccountName,
a.UserName,
b.PrimaryGroup,
b.MemberList,
a.LogonDateTime,
a.UserID
FROM UDT_UserLastActivity a
JOIN (
SELECT UserID, MAX(LogonDateTime) maxLogon
FROM UDT_UserLastActivity
GROUP BY UserID
) maxRecord
ON maxRecord.UserID = a.UserID
AND maxRecord.maxLogon = a.LogonDateTime
JOIN UDT_User b
ON b.UserID = a.UserID
ORDER BY a.LogonDateTime DESC;
此外,如果您要使用 MAX() 函数,您应该能够完全删除 maxrecord 的子查询连接,请参见下文:
SELECT
b.AccountName,
a.UserName,
b.PrimaryGroup,
b.MemberList,
MAX(a.LogonDateTime) as maxLogonDateTime,
a.UserID
FROM UDT_UserLastActivity a
JOIN UDT_User b
ON b.UserID = a.UserID
GROUP BY b.AccountName,
a.UserName,
b.PrimaryGroup,
b.MemberList,
a.UserID
ORDER BY MAX(a.LogonDateTime) DESC;
希望对您有所帮助。
我研究了 30 多种不同的方法来从已加入的 table 中获取最新日期。需要专业人士的帮助。
注:
- 使用 SolarWinds 创建自定义 SQL 报告
- 对 SQL
我正在尝试获取所有用户的列表以及他们的用户名、主要组、名称和最新登录日期。此数据分布在两个 table 之间。
问题是我的当前代码给了我一长串具有相同日期的重复用户。我只需要一个包含最新登录日期的所有用户的列表。
这是我想出的代码,它可以毫无问题地创建我的报告,但仍然显示重复项,根本没有分组。我可以缺少什么?
SELECT
b.AccountName,
a.UserName,
b.PrimaryGroup,
b.MemberList,
a.LogonDateTime,
a.UserID
FROM UDT_UserLastActivity a
JOIN (
SELECT UserID, MAX(LogonDateTime) maxLogon
FROM UDT_UserLastActivity
GROUP BY UserID
) maxRecord
ON maxRecord.UserID = a.UserID
AND maxRecord.maxLogon = a.LogonDateTime
JOIN UDT_User b
ON b.UserID = a.UserID
ORDER BY a.LogonDateTime DESC
在此先感谢所有愿意提供帮助的人!
只需分组并搜索最大值
SELECT
b.AccountName,
a.UserName,
b.PrimaryGroup,
b.MemberList,
max(a.LogonDateTime) as LastDate,
a.UserID
FROM UDT_UserLastActivity a
JOIN (
SELECT UserID, MAX(LogonDateTime) maxLogon
FROM UDT_UserLastActivity
GROUP BY UserID
) maxRecord
ON maxRecord.UserID = a.UserID
AND maxRecord.maxLogon = a.LogonDateTime
JOIN UDT_User b
ON b.UserID = a.UserID
group by
b.AccountName,
a.UserName,
b.PrimaryGroup,
b.MemberList,
a.UserID
ORDER BY a.LogonDateTime DESC
我只需要我的所有用户及其最新登录日期的列表。
假设基本数据在用户 table 中,您只需要来自 activity table:
的 LogonDateTimeSELECT
u.AccountName,
u.UserName,
u.PrimaryGroup,
u.MemberList,
(-- Scalar subquery to get the last logon
SELECT MAX(LogonDateTime)
FROM UDT_UserLastActivity AS ula
WHERE ula.UserID = u.UserID
) AS LastLogon,
u.UserID
FROM UDT_User AS u
ORDER BY LastLogon DESC
您可以使用如上所述的分组方法,也可以只使用 DISTINCT 函数,如下所示:
SELECT DISTINCT
b.AccountName,
a.UserName,
b.PrimaryGroup,
b.MemberList,
a.LogonDateTime,
a.UserID
FROM UDT_UserLastActivity a
JOIN (
SELECT UserID, MAX(LogonDateTime) maxLogon
FROM UDT_UserLastActivity
GROUP BY UserID
) maxRecord
ON maxRecord.UserID = a.UserID
AND maxRecord.maxLogon = a.LogonDateTime
JOIN UDT_User b
ON b.UserID = a.UserID
ORDER BY a.LogonDateTime DESC;
此外,如果您要使用 MAX() 函数,您应该能够完全删除 maxrecord 的子查询连接,请参见下文:
SELECT
b.AccountName,
a.UserName,
b.PrimaryGroup,
b.MemberList,
MAX(a.LogonDateTime) as maxLogonDateTime,
a.UserID
FROM UDT_UserLastActivity a
JOIN UDT_User b
ON b.UserID = a.UserID
GROUP BY b.AccountName,
a.UserName,
b.PrimaryGroup,
b.MemberList,
a.UserID
ORDER BY MAX(a.LogonDateTime) DESC;
希望对您有所帮助。