2016-05-31 67 views
-1

我已經嘗試過,但只是無法得到結果,所以我在這裏尋求幫助。我在電腦上有一個用戶登錄表。我想統計用戶登錄到計算機的次數,然後獲得最大值,以便最大用戶被視爲計算機的主要用戶。SQL返回從計數最大值的所有字段

Example

+2

你有哪些確切列的表?你使用哪種rdbms?你到目前爲止還嘗試過什麼? – istovatis

+0

對於這類問題的許多答案,請參閱[tag:most-n-per-group]。另請閱讀此:http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557#285557爲什麼更容易截取編輯器的截圖,將其保存在本地,將其上傳到SO並將其鏈接到問題中,然後簡單地複製並粘貼編輯器的內容。並告訴我們您正在使用哪個DBMS。 –

+0

在後端使用SQL 2012,實際上只是使用MS Access作爲查詢引擎。嘗試以下,但它只返回1行,而不是我想要得到的結果,如上所示(呃代表表UserHist。'SELECT uh.computer_id,uh.user_name,Count(uh.user_name) FROM uh GROUP通過uh.computer_id,uh.user_name HAVING Count(uh.user_name)=(SELECT Max(a.cnt) FROM(SELECT uh.computer_id,Count(uh.user_name)AS cnt FROM uh GROUP BY uh.computer_id ,uh.user_name)as a)' – Tom

回答

0
select Comp, [User], count([User]) as MaxCnt 
from TableHere 
group by Comp, [User] 
1

取決於你所使用的數據庫管理系統,你可以使用一個窗口函數ROW_NUMBER()排名每補償計數。然後拉最高排名。

SELECT 
    Comp, 
    [User], 
    Cnt 
FROM 
    (SELECT 
     Comp, 
     [User], 
     COUNT(1) AS Cnt, 
     ROW_NUMBER() OVER (PARTITION BY Comp ORDER BY Count(1) DESC) AS Rnk 
    FROM UserHist 
    GROUP BY Comp, [User]) BaseTable 
WHERE Rnk = 1 
1

您可以RANK的計數,然後選擇最大。這使用CTE來獲取數據和等級。

WITH CTECOMP AS 
(
SELECT COMP, [user], COUNT([USER]) [USERCOUNT], 
     RANK() OVER (PARTITION BY COMP ORDER BY COUNT([USER]) DESC) [MYRANK] 
FROM @TableData 
GROUP BY comp, [user] 
) 
SELECT * 
FROM CTECOMP 
WHERE MYRANK = 1