- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLiteで最も古いレコードのみの削除)
SQLiteで最も古いレコードの削除
このQ&Aのポイント
- AndoroidでDBを使う際に最も古いレコードを削除するためのSQL文を作成する方法がわかりません。
- テーブルTESTにはIDとVALUEというカラムがあり、最大で10件のレコードを保持します。
- 11件目のデータが発生した場合、最も古い1件目のレコードを削除し、新しいデータをテーブルに保存する必要があります。しかし、作成したSQL文が正しくありません。
- みんなの回答 (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が最も小さい ということになります。 なんとなく分かっていただけますかね・・・
その他の回答 (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); でいいと思いますが。
質問者
補足
解答ありがとうございます。 最も古いとは、一番最初に挿入されたレコードです。 IDはプライマリでシーケンス番号なので、IDが最も小さいものになります。 教えていただいたSQLを実行したら、期待した結果になったのですが、お恥ずかしい話、処理の理解ができません。 「where GPS_INFO.ID > tb.ID」とは何をしているのでしょうか?
お礼
丁寧な解説ありがとうございます。 良く判りました! 自レコードより小さいIDが取得できなかったレコードが、最も小さいレコードなので、それを条件に削除するのですね。 教えていただかなければ絶対に、思いつかないSQL文でした。 ありがとうございました。