我回到了以前的类似问题。这应该是一件简单的事情,但无法理解它。以下是这些表的概述以及我尝试使用此子查询实现的内容。我正在使用SQL Server 2008。
用户 这包含用户列表
登录审核 包含登录尝试列表。它包含userID和loginDate(datetime字段)
我想要实现的目标 我希望能够从审计表中显示用户行和他们的上次登录日期。
这是我的查询,从外行的角度来看是有意义的! ;-)
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
。我希望所有用户都能回来,无论他们是否登录。
任何帮助都将不胜感激。
由于 缺口
答案 0 :(得分: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
答案 1 :(得分:0)
您想用
替换子查询SELECT userID, max(loginDate) as lastLogin FROM LoginAudit GROUP BY userID
然后用“l.lastLogin”替换主查询中的“l.loginDate”
您想要的功能由聚合查询中的MAX()函数提供,而不是TOP()函数。