我有以下两个问题。
第一个列出用户和上次登录日期如下:
iUserNum chDefaultLogin dateLastLogin
-------- -------------- -------------
17 fred.bloggs 01/06/2011
23 john.doe 13/05/2011
使用以下查询
SELECT SDToken.iUserNum, chDefaultLogin, dateLastLogin
FROM SDUserScope JOIN SDToken ON SDUserScope.iUserNum = SDToken.iUserNum
第二个使用此查询计算用户在过去7天内登录的次数(给定iUserNum用户编号)(在下面的示例中,我给出的iUserNum为17):
SELECT COUNT(*) FROM SDToken
JOIN SDLogEntry ON SDLogEntry.chTokenSerialNum = SDToken.chSerialNum
JOIN SDUserScope ON SDToken.iUserNum = SDUserScope.iUserNum
JOIN SDLogMessage ON SDLogEntry.iMessageNum = SDLogMessage.iMessageNum
WHERE SDToken.iUserNum = 17 AND SDUserScope.iSiteNum = iMySite
AND SDLogEntry.dtGMTDate > GMTDateNow - 7
我想要做的就是将两者结合在一起,所以我得到了表中每个用户的计数,如下所示:
iUserNum chDefaultLogin dateLastLogin loginCount
-------- -------------- ------------- ----------
17 fred.bloggs 01/06/2011 12
23 john.doe 13/05/2011 4
答案 0 :(得分:1)
您是否尝试统一查询并只添加分组?
SELECT SDToken.iUserNum,
chDefaultLogin,
dateLastLogin,
COUNT(*) AS loginCount
FROM SDUserScope
INNER JOIN SDToken
ON SDUserScope.iUserNum = SDToken.iUserNum
INNER JOIN SDLogEntry
ON SDLogEntry.chTokenSerialNum = SDToken.chSerialNum
INNER JOIN SDLogMessage
ON SDLogEntry.iMessageNum = SDLogMessage.iMessageNum
WHERE SDToken.iUserNum = 17
AND SDUserScope.iSiteNum = iMySite
AND SDLogEntry.dtGMTDate > GMTDateNow - 7
GROUP BY SDToken.iUserNum,
chDefaultLogin,
dateLastLogin
答案 1 :(得分:0)
作为公共密钥加入用户名的2个子查询应该在MS Sql server / SYBASE中完成它的工作,它会像下面一样,但任何其他RDBMS你可以使用2个子查询应用相同的逻辑...语法可能有点不同点/ p>
Select A.SDToken.iUserNem, A.chDefaultLogin, A.dateLastLoginm,B.logincount
FROM
(
(SELECT SDToken.iUserNem, chDefaultLogin, dateLastLogin FROM SDUserScope JOIN SDToken ON SDUserScope.iUserNum = SDToken.iUserNum )A
INNER JOIN
(SELECT COUNT(*)logincount,SDToken.iUserNem FROM SDToken
JOIN SDLogEntry ON SDLogEntry.chTokenSerialNum = SDToken.chSerialNum
JOIN SDUserScope ON SDToken.iUserNum = SDUserScope.iUserNum
JOIN SDLogMessage ON SDLogEntry.iMessageNum = SDLogMessage.iMessageNum
WHERE SDToken.iUserNum = 17 AND SDUserScope.iSiteNum = iMySite AND SDLogEntry.dtGMTDate > GMTDateNow - 7
GROUP BY SDToken.iUserNem)B
ON A.iUserNem = B.iUserNem
)