怎么写这个查询?

时间:2011-04-08 15:16:04

标签: sql sql-server-2008

我有一个包含用户的表...某种方式的用户被加倍(有多个记录)。我希望通过电子邮件地址清楚地提取每个用户记录,对于拥有多个记录的用户,我只想提取登录次数最多的记录。

--USERS----------------------------
ID EMAIL           TOTAL_LOGINS
1  blah@blah.com   3
2  blah@blah.com   1
3  bloop@blah.com  1
4  bloop@blah.com  45
5  blarp@blah.com  6
6  flag@blah.com   2

我希望返回的查询是:

ID EMAIL           TOTAL_LOGINS
1  blah@blah.com   3
4  bloop@blah.com  45
5  blarp@blah.com  6
6  flag@blah.com   2

有人可以帮我解决这个问题吗?

谢谢!

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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

答案 2 :(得分:1)

在mysql中,它看起来像这样:

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

我猜你的解决方案看起来很相似。