2017-06-27 59 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。!工作解決方案呢! –