sql - DISTINCT 仅适用于一列

标签 sql sql-server

假设我有以下查询。

SELECT ID, Email, ProductName, ProductModel FROM Products

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

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

诸如 DISTINCTGROUP 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/

相关文章:

sql - 获取 SQL Server 中插入行的大小

sql - 如何使用 groupby 和聚合函数将 SQL 查询中的行数作为单个数字返回?

sql - Entity Framework 6 Update from Database 忽略已删除的列,类型更改

MySQL 根据 DISTINCT 值对多行进行分组

c# - SMO "Restore failed for Server"从文件恢复备份

sql - 如何将 "condensed"PostgreSQL 行扩展到单独的列中?

sql - 查询获取每条记录的最小日期

sql-server - 如何保留表更改的审核/历史记录

sql-server - SQL Server - 如何在更新命令上提示索引?

c# - SQL Server CLR 静态变量设置回 null