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:他的问题和输出在这一点上不太匹配。。。(至少我不太清楚他到底想要什么……)