我有一个日志表,其中包含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
我该怎么做?
答案 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