假设我有以下查询。
SELECT ID, Email, ProductName, ProductModel FROM Products
我如何修改它,使其不会返回重复的电子邮件?
换句话说,当多个行包含相同的电子邮件时,我希望结果只包含其中的一行(最好是最后一行)。应允许其他列中存在重复项。
像DISTINCT
和GROUP BY
这样的子句似乎对整个行都有效。所以我不确定如何处理这个问题。
发布于 2011-02-17 04:28:13
如果使用的是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
发布于 2011-02-17 04:32:12
这假设SQL Server,并且您对“2005+”的定义是给定电子邮件的最大PK
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
发布于 2016-02-22 07:56:47
你可以像这样使用GROUP BY
来解决这个问题:
SELECT ID, Email, ProductName, ProductModel
FROM Products
GROUP BY Email
https://stackoverflow.com/questions/5021693
复制相似问题