加入表时的SQL子查询

时间:2013-08-05 19:18:38

标签: sql-server sql-subselect

我回到了以前的类似问题。这应该是一件简单的事情,但无法理解它。以下是这些表的概述以及我尝试使用此子查询实现的内容。我正在使用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。我希望所有用户都能回来,无论他们是否登录。

任何帮助都将不胜感激。

由于 缺口

2 个答案:

答案 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()函数。