2011-04-08 15 views
2

私はユーザーを含むテーブルを持っています...ある方法または別のユーザーが倍増しました(複数のレコードを持つ)。私はすべてのユーザーレコードを電子メールアドレスで区別し、複数のレコードを持つユーザーに対しては、最もログインが多いレコードのみを取得したいと考えています。私は、クエリが返すしたい何このクエリを書くには?

--USERS---------------------------- 
ID EMAIL   TOTAL_LOGINS 
1 [email protected] 3 
2 [email protected] 1 
3 [email protected] 1 
4 [email protected] 45 
5 [email protected] 6 
6 [email protected] 2 

はこれです:

ID EMAIL   TOTAL_LOGINS 
1 [email protected] 3 
4 [email protected] 45 
5 [email protected] 6 
6 [email protected] 2 

誰かがこのクエリで私を助けることができますか?

ありがとうございます! MySQLで

答えて

5
SELECT EMAIL, MAX(TOTAL_LOGINS) 
FROM  USERS 
GROUP BY EMAIL 

EDIT:

これは、あなたがMS SQLでやりたいだろう。

SELECT * -- Bad practice. I'm just showing that you can select anything. 
FROM  USERS 
WHERE  ID = (SELECT TOP 1 ID 
       FROM  USERS u 
       WHERE  u.EMAIL = USERS.EMAIL 
       ORDER BY TOTAL_LOGINS DESC) 
+0

+1、単純なグループでそれを解決します。 –

+0

@Justin:私はユーザーのIDも必要です...実際には、上記の表を要約しました...実際にはテーブルにもっと多くの列があり、私はusers表でselect *を実行する必要があります。 – Ryan

+0

これは単なるアカウントを持っているすべてのユーザーを選択します.... –

4
;WITH CTE AS 
(
    SELECT *, ROW_NUMBER() OVER(PARTITION BY EMAIL ORDER BY TOTAL_LOGINS DESC) Corr 
    FROM USERS 
) 

SELECT ID, EMAIL, TOTAL_LOGINS 
FROM CTE 
WHERE Corr = 1 
+0

これはRaffael1984 @電子メールアドレス – Raffael

+0

によって明らかに引っ張っていません - あなたは正しいです、私は質問の一部を逃しました。私は今私の答えにそれを加えました。 – Lamak

+0

しかし、これはまた、単一のエントリを持つユーザを出力します..... –

1

それはそのようなものになります。私はあなたのソリューションはかなり似ているだろうと思い

select * from users where email = '[...]' order by total_logins desc limit 1; 

を。

+2

MS SQLの '... limit 1'ではなく' SELECT TOP 1'になります。 –

関連する問題