2011-04-08 239 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 

有人可以幫助我查詢?

謝謝!

回答

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

編輯:

這將你在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,簡單羣體解決了它。 – 2011-04-08 15:24:42

+0

@Justin:我也需要用戶的ID ......事實上,我只是總結了上面的表格......表格中實際上有更多的列,我需要在用戶表上做select *。 – Ryan 2011-04-08 15:27:26

+0

不是真的 - 這也會選擇所有擁有單一帳戶的用戶。...... – 2011-04-08 15:28:38

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

這不是通過電子郵件地址 – Raffael 2011-04-08 15:23:08

+0

明顯拉動@ Raffael1984 - 你說得對,我錯過了問題的一部分。我現在補充說我的答案。 – Lamak 2011-04-08 15:26:43

+0

但是,這也將輸出用戶只有一個單一的條目..... – 2011-04-08 15:27:55

1

在MySQL它看起來類似的東西:

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

我想您的解決方案看起來很相似。

+2

這將是'SELECT TOP 1',而不是MS SQL中的...... limit 1'。 – 2011-04-08 15:26:30