删除每个日期的MIN StatementID除外的所有重复项

时间:2018-06-25 18:25:01

标签: sql sql-server tsql

好的,所以我的代码中的一个缺陷创建了许多重复的语句,但费用相同。它们具有相同的ResidentID和相同的发布日期,但是ID和StatementID不同

ID  |  ResidentID  |  StatementID  |  PostedON
1         4039            10          06-15-18
2         4039            11          06-15-18
3         4039            12          06-15-18

4         4039            20          06-20-18
5         4039            21          06-20-18
6         4039            22          06-20-18

7         3456            13          06-15-18
8         3456            14          06-15-18
9         3456            15          06-15-18

10        3456            23          06-21-18
11        3456            24          06-21-18

我有一长串的很多ResidentID,这些ID在许多日期都有重复。如何删除除每个residentID每个唯一日期的StatementID最低的行以外的所有行

示例:居民3456将返回语句13和23。

这是在sql服务器tsql中。

Delete语句如何工作。我有:

DELETE FROM Statements 
FROM (SELECT *, 
             ROW_NUMBER() 
             OVER (
                  PARTITION BY ResidentID, PostedON, PayerTypeID    
                  ORDER BY StatementNumber
                  ) seq
    FROM Statements
    ) s
        INNER JOIN person p ON s.ResidentID = p.ID
WHERE seq > 1
AND p.FacilityID = 7
AND p.id = 1316

,但似乎删除了该表中的所有内容。我错了吗?

1 个答案:

答案 0 :(得分:0)

使用row_number()函数:

delete t 
from (select *, 
             row_number() over (partition by ResidentID, PostedON order by StatementID) seq
      from table 
     ) t
where seq > 1;