2011-06-17 96 views
1

我有以下两个查询。如何在sql查询中嵌套计数

首先列出用户和上次登录的日期是这样的:

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 

第二个给出的时间在用户登录次数的计数(给定iUserNum用户号码)在过去7天内使用此查询(在下面的例子中,我给出了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

什么RDBMS好吗? – gbn 2011-06-17 10:24:38

+0

不幸的是我在这里有点瞎了。这是在一个应用服务器(RSA)上,它有一个基本的查询编辑器来输入查询 - 但我不知道它在后台运行的是什么。 – Ben 2011-06-17 10:26:44

回答

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 
0

2子查询连接上的用户名作为公共密钥应该做在MS工作SQL SERVER/SYBASE将lokk像之下,但任何其他RDBMS可以申请使用子查询2相同的逻辑......语法可能有点不同BUIT

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 
    )