2016-05-31 8 views
-1

私は試しましたが、結果を得ることができないため、ここで助けを求めています。私はコンピュータ上のユーザーのためのログインのテーブルを持っています。私は、ユーザーがコンピュータにログインした回数を数え、最大ユーザーがコンピュータのプライマリユーザーと見なされるように最大値を取得したいと考えています。SQLは最大カウントからすべてのフィールドを返します

Example

+2

正確なカラムはどのテーブルにありますか?どのrdbmsを使用していますか?これまでに何を試しましたか? – istovatis

+0

この種の質問に対する多くの回答については、[タグ:最大グループ別]を参照してください。また、これを読んでください: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行しか返さない(uhはUserHistテーブルを表しています)。 uh.computer_id、uh.user_name(0h.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

は、使用しているDBMS内容に応じて、あなたは、カンプ当たりのカウント数をランク付けするために窓関数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 
関連する問題