SQL查询去掉没有主键的重复记录,保留最近的

SQL query to remove duplicate records without primary key, keeping the most recent

我有一笔交易 table (SQL Express 2014) 持有销售交易。我需要删除重复的记录,只保留最近的记录

当前数据示例

ACC_PART_MAT      TX_DATE     
A1025-A552        2021-09-02
A1025-B1994       2121-04-28
A1025-B1994       2121-09-02
A1025-B1994       2121-03-21
A1025-B1960       2121-05-20

需要最终结果

ACC_PART_MAT      TX_DATE     
A1025-A552        2021-09-02
A1025-B1994       2121-09-02
A1025-B1960       2121-05-20

有很多解决重复记录的示例,但我无法在没有主键和日期的情况下使用它们。 非常感谢

对于您的示例,您可以只使用聚合:

select ACC_PART_MAT, min(TX_DATE) as TX_DATE
from t
group by ACC_PART_MAT;

如果你真的想从 table 中删除行,你可以使用 updatable CTE——但要小心,因为这会改变 table:

with todelete as (
      select t.*,
             row_number() over (partition by ACC_PART_MAT order by TX_DATE asc) as seqnum
      from t
     ) 
delete from todelete
    where seqnum > 1;