2017-06-27 61 views
1

我有一个没有主键列的表。第一列的类型是DATETIME,名称为DateTime,其余的类型为NVARCHAR(16)。 AlarmStatus列中的值可以是'0'或'1'。 因此,我的表可能有多行具有相同的DateTime和不同的AlarmStatus值。我需要一种方法来删除具有相同DateTime的所有行,只要它们中的任何一个在AlarmStatus列中没有'1'。 enter image description hereSQLite。 DELETE查询中的复杂条件?

回答

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 
) 
+0

辉煌!有用!谢谢! –

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'); 
+0

谢谢@CL。!工作解决方案呢! –