2017-06-27 7 views
1

プライマリキーの列がないテーブルがあります。最初の列は、DateTimeという名前のDATETIME型で、残りはNVARCHAR(16)型です。 AlarmStatus列の値は '0'または '1'のいずれかになります。 このように、私のテーブルは、同じDateTimeと異なるAlarmStatus値を持つ複数の行を持つことがあります。私は、AlarmStatus列に '1'がない場合にのみ、同じDateTimeを持つすべての行を削除する方法が必要です。 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で行うことができます、

DELETE FROM MyTable 
WHERE NOT EXISTS (SELECT * 
        FROM MyTable AS T2 
        WHERE T2.DateTime = MyTable.DateTime 
        AND T2.AlarmStatus = '1'); 

の代わりのリストを取得する:あなたが同じDateTime値と設定AlarmStatusとは行が存在しない行を削除したいですすべてのタイムスタンプを保持したい状態にして、削除する行に次のいずれかがないことを確認します。

DELETE FROM MyTable 
WHERE DateTime NOT IN (SELECT DateTime 
         FROM MyTable 
         WHERE AlarmStatus = '1'); 
+0

ありがとう@CL。!あまりにも効果的なソリューション! –