Sql 如何编写此查询?

Sql 如何编写此查询?,sql,sql-server-2008,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.

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

--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
有人能帮我解答这个问题吗


谢谢

在mysql中,它看起来是这样的:

;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
select * from users where email = '[...]' order by total_logins desc limit 1;
我想你的解决方案看起来很相似

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)

这不是通过电子邮件-address@Raffael1984-你说得对,我错过了问题的那一部分。我现在把它添加到我的答案中。@yper-OP在注释中指定了“表中实际上还有更多的列,我需要在用户表上执行select*”是的,你是对的。Justin的解决方案很简单,但不能为表显示id或其他字段。它需要第二个
连接
加入
。这个解决方案要好得多。这就是为什么我对这一次投了更高的票。我忍不住要发表评论。你可以说我很嫉妒,因为MySQL没有窗口子句。它应该是
selecttop1
,而不是
。。。在MS SQL中限制1
。@Justin:我还需要用户的ID。。。事实上,我刚刚总结了上表。。。实际上,表中还有更多的列,我需要在用户表上做一个select*。@marc-但这正是OP想要的<代码>flag@blah.com在期望的结果中。@Martin:他的问题和输出在这一点上不太匹配。。。(至少我不太清楚他到底想要什么……)