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;
我有一笔交易 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;