• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLiteで最も古いレコードのみの削除)

SQLiteで最も古いレコードの削除

このQ&Aのポイント
  • AndoroidでDBを使う際に最も古いレコードを削除するためのSQL文を作成する方法がわかりません。
  • テーブルTESTにはIDとVALUEというカラムがあり、最大で10件のレコードを保持します。
  • 11件目のデータが発生した場合、最も古い1件目のレコードを削除し、新しいデータをテーブルに保存する必要があります。しかし、作成したSQL文が正しくありません。

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

NOT EXISTS条件はカッコ内のSELECT文でレコードが取得できないときにTRUEになります。 先ほどのSQLの、 >where not exists( >select * from Test as tb >where Test.ID > tb.ID); のSELECT文でTestテーブルから自レコードよりIDが小さいレコードを取得しています。 #tbはただのテーブル別名です。 #SQLiteだとDELETE対象のテーブルにはテーブル別名がつけられない(?)ようだったのでTestと指定しています。 レコードが取得できない = 自レコードのIDが最も小さい ということになります。 なんとなく分かっていただけますかね・・・

rinet8223
質問者

お礼

丁寧な解説ありがとうございます。 良く判りました! 自レコードより小さいIDが取得できなかったレコードが、最も小さいレコードなので、それを条件に削除するのですね。 教えていただかなければ絶対に、思いつかないSQL文でした。 ありがとうございました。

その他の回答 (1)

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

「最も古い」という判断をする条件はなんなのでしょうか? IDが最も小さいもの、ということであれば delete from Test where not exists( select * from Test as tb where Test.ID > tb.ID); でいいと思いますが。

rinet8223
質問者

補足

解答ありがとうございます。 最も古いとは、一番最初に挿入されたレコードです。 IDはプライマリでシーケンス番号なので、IDが最も小さいものになります。 教えていただいたSQLを実行したら、期待した結果になったのですが、お恥ずかしい話、処理の理解ができません。 「where GPS_INFO.ID > tb.ID」とは何をしているのでしょうか?

関連するQ&A