我的数据库表看起来像:
Email, IP, Country
a@a.com 1.2.3.4 Canada
a@b.com 1.4.5.6 France
a@a.com 5.4.3.3 United States
a@c.com 5.4.4.2 Mexico
a@b.com 5.1.1.1 France
The Result that i want:
a@a.com 1.2.3.4 Canada
a@b.com 1.4.5.6 France
a@c.com 5.4.4.2 Mexico
电子邮件是过滤列。 结果应该只显示它通过电子邮件找到的第一个1,并删除其他的,无论它们包含哪些信息。
我尝试使用Group By,因为列信息不同而我需要所有信息,所以不可能。
知道如何使用ms sql查询完成这项工作吗?
我正在使用ms sql 2008
答案 0 :(得分:1)
您可以使用cte + Row_Number
仅获取每个组的第一行(完整):
WITH CTE AS
(
SELECT Email, IP, Country
, RN = ROW_NUMBER() OVER (PARTITION BY Email ORDER BY Email)
FROM dbo.Emails
)
SELECT Email, IP, Country
FROM CTE
WHERE RN = 1
如果您想要特定的行,请更改ORDER BY
。