小编典典

仅一列的 DISTINCT

all

假设我有以下查询。

SELECT ID, Email, ProductName, ProductModel FROM Products

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

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

子句喜欢DISTINCT并且GROUP BY似乎适用于整行。所以我不确定如何解决这个问题。


阅读 77

收藏
2022-07-30

共1个答案

小编典典

如果您使用的是 SQL Server 2005 或更高版本,请使用:

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 子句的示例:

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
2022-07-30