如何对不同的列进行分组并仅返回找到的第一列

时间:2014-05-12 10:39:18

标签: sql sql-server-2008

我的数据库表看起来像:

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

1 个答案:

答案 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