如何从表中删除重复添加日志?

时间:2013-01-31 12:08:01

标签: sql sql-server tsql duplicate-removal

我有一个日志表,其中包含ADD状态的多行(“status = 0”表示“添加”)。

如何删除status = 0但必须是未重复的值。例如,每个事务id(tid)必须只有一个status = 0的值。

例如;

id tid       tblname           type     status 
1   101     x                   U              0
2   101     x                   U              0
3   102     x                   U              0
4   102     x                   U              0
5   102     x                   U              0

必须返回:

id  tid     tblname       type           status 
1   101     x            U              0
3   102     x            U              0

我该怎么做?

1 个答案:

答案 0 :(得分:2)

使用cte和ROW_NUMBER

WITH x AS (SELECT rn = Row_number() 
                       OVER( 
                         partition BY tid 
                         ORDER BY id) 
         FROM   dbo.log
         WHERE  status = 0 
                AND tblname = 'X' 
                AND type = 'U') 
DELETE FROM  x 
WHERE  rn > 1