0

我已经查看了 30 多种不同的方法来从连接表中获取最新日期。需要专业人士的帮助。

注意:
- 使用 SolarWinds 创建自定义 SQL 报告
- SQL 相当新

我正在尝试获取所有用户的列表,其中包含他们的用户名、主要组、名称和最近登录日期。此数据分布在两个表之间。

问题是我拥有的当前代码给了我一长串具有相同日期的重复用户。我只需要我的所有用户的列表以及他们的最新登录日期。

这是我想出的代码,它可以毫无问题地创建我的报告,但仍然显示重复,根本没有分组。我能错过什么?

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

提前感谢任何愿意提供帮助的人!

4

3 回答 3

2

只需分组并搜索 max

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
于 2018-12-19T14:41:52.570 回答
0

我只需要我的所有用户的列表以及他们的最新登录日期。

假设基本数据在 users 表中,您只需要活动表中的 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
于 2018-12-19T15:08:38.313 回答
0

您可以使用上述 group by 方法,也可以只使用 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;

希望有帮助。

于 2018-12-19T16:05:36.620 回答