我有一个没有主键列的表。第一列的类型为DATETIME,命名为DateTime,其余列为NVARCHAR类型(16)。 AlarmStatus列中的值可以是“0”或“1”。 因此,我的表可能有多个具有相同DateTime和不同AlarmStatus值的行。我想要一种方法来删除具有相同DateTime的所有行,如果它们中没有一个在AlarmStatus列中有'1'。
答案 0 :(得分:1)
DELETE
FROM yourTable
WHERE DateTime IN
(
SELECT DateTime
FROM yourTable
GROUP BY DateTime
HAVING SUM(CASE WHEN AlarmStatus = '1' THEN 1 ELSE 0 END) = 0
)
答案 1 :(得分:1)
可以使用correlated subquery完成此操作:您要删除的行不存在具有相同DateTime
值且设置为AlarmStatus
的行:
DELETE FROM MyTable
WHERE NOT EXISTS (SELECT *
FROM MyTable AS T2
WHERE T2.DateTime = MyTable.DateTime
AND T2.AlarmStatus = '1');
或者,获取包含您要保留状态的所有时间戳的列表,并检查要删除的行没有其中一个:
DELETE FROM MyTable
WHERE DateTime NOT IN (SELECT DateTime
FROM MyTable
WHERE AlarmStatus = '1');