sql - 根据一列相同的值删除重复行但保留一条记录

标签 sql sql-server

SQL 服务器版本

删除所有 service_date = '2018-08-29 13:05:00.000' 的重复行(第 3 行到第 18 行),但保留最旧的行(第 2 行),当然还保留第 1 行,因为它的 service_date 不同。不要介意 create_timestamp 或 document_file 因为它是同一个客户。有什么想法吗?

Click here for example

最佳答案

在 SQL Server 中,我们可以尝试使用 CTE 进行删除:

WITH cte AS (
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY service_date ORDER BY create_timestamp) rn
    FROM yourTable
)

DELETE
FROM cte
WHERE rn > 1;

此处的策略是为共享相同 service_date 的每组记录分配一个行号,其中 1 分配给该组中最旧 的记录。然后,我们可以通过仅针对行号大于 1 的所有记录来进行删除。

关于sql - 根据一列相同的值删除重复行但保留一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53110966/

相关文章:

Mysql:允许查询否则无法访问的列?

mysql - SQL 查询,桶中有哪些项目?

sql - 展平相交的时间跨度

sql-server - 将 DateTime 数据库字段设置为 "Now"

sql - 如何更改 SQL Server 中的自动增量语句?

mysql - SQL:如何总结几十年的计数?

mysql - 使用 sql 语法为具有 Null 或任何其他值的特定行更新单个 BLOB 列

java - Spring + Java : Timestamp cannot be cast to Date? 从 SQL 中提取,但类型为日期。代码中没有时间戳

php - 配置 PHP 5.3 以与 MS SQL Server 一起使用

c# - SqlDataReader HasRows=True 但没有数据