首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >只有一列的DISTINCT

只有一列的DISTINCT
EN

Stack Overflow用户
提问于 2011-02-17 04:23:19
回答 8查看 325.3K关注 0票数 175

假设我有以下查询。

代码语言:javascript
复制
SELECT ID, Email, ProductName, ProductModel FROM Products

我如何修改它,使其不会返回重复的电子邮件?

换句话说,当多个行包含相同的电子邮件时,我希望结果只包含其中的一行(最好是最后一行)。应允许其他列中存在重复项。

DISTINCTGROUP BY这样的子句似乎对整个行都有效。所以我不确定如何处理这个问题。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-02-17 04:28:13

如果使用的是SQL Server 2005或更高版本,请使用以下命令:

代码语言:javascript
复制
SELECT *
  FROM (
                SELECT  ID, 
                        Email, 
                        ProductName, 
                        ProductModel,
                        ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn
                    FROM Products
              ) a
WHERE rn = 1

编辑:使用where子句的示例:

代码语言:javascript
复制
SELECT *
  FROM (
                SELECT  ID, 
                        Email, 
                        ProductName, 
                        ProductModel,
                        ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn
                    FROM Products
                   WHERE ProductModel = 2
                     AND ProductName LIKE 'CYBER%'

              ) a
WHERE rn = 1
票数 208
EN

Stack Overflow用户

发布于 2011-02-17 04:32:12

这假设SQL Server,并且您对“2005+”的定义是给定电子邮件的最大PK

代码语言:javascript
复制
WITH CTE AS
(
SELECT ID, 
       Email, 
       ProductName, 
       ProductModel, 
       ROW_NUMBER() OVER (PARTITION BY Email ORDER BY ID DESC) AS RowNumber 
FROM   Products
)
SELECT ID, 
       Email, 
       ProductName, 
       ProductModel
FROM CTE 
WHERE RowNumber = 1
票数 11
EN

Stack Overflow用户

发布于 2016-02-22 07:56:47

你可以像这样使用GROUP BY来解决这个问题:

代码语言:javascript
复制
SELECT ID, Email, ProductName, ProductModel
FROM Products
GROUP BY Email
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5021693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档