0

我又回到了以前遇到的类似问题。这应该是一件简单的事情,但我无法理解它。这是表的概述以及我试图通过此子查询实现的目标。我正在使用 SQL Server 2008。

用户 这包含用户列表

登录审核 包含登录尝试列表。它保存用户 ID 和 loginDate(日期时间字段)

我想要实现的目标 是能够从审计表中显示用户行和他们的最后登录日期。

这是我的查询,从外行的角度来看这是有道理的!;-)

SELECT  u.userID, u.fName, u.sName, l.loginDate
   FROM    Users AS u LEFT OUTER JOIN
                      (SELECT    TOP (1) loginDate, userID
                        FROM   LoginAudit) AS l ON l.userID = u.userID
   WHERE   (u.cliID = 1)

这只是拉回最后loginDate一个登录用户的最后一个。我希望所有用户都回来,无论他们是否登录。

任何援助将不胜感激。

谢谢尼克

4

2 回答 2

1
select a.userid, a.fName, a.sName,
  max(b.loginDate)
from 
   users a 
   left outer join lastLogin b on a.userid = b.userid
group by a.userid, a.fName, a.sName
于 2013-08-05T19:22:22.023 回答
0

您想将子查询替换为

SELECT userID, max(loginDate) as lastLogin FROM LoginAudit GROUP BY userID

然后将主查询中的“l.loginDate”替换为“l.lastLogin”

您想要的功能由聚合查询中的 MAX() 函数提供,而不是 TOP() 函数。

于 2013-08-05T19:20:33.853 回答