假设我有以下查询。
SELECT ID, Email, ProductName, ProductModel FROM Products
如何修改它以使其不返回重复的电子邮件?
换句话说,当多行包含相同的电子邮件时,我希望结果仅包含其中一行(最好是最后一行)。其他列中应允许重复。
诸如 DISTINCT
和 GROUP BY
之类的子句似乎适用于整行。所以我不知道如何解决这个问题。
最佳答案
如果您使用的是 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
关于sql - DISTINCT 仅适用于一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5021693/