X という名前の列を持つテーブルが 1 つある場合、int が含まれます。今、Xの合計が300以下である最も古いN行を選択したい(実際には削除したい)?
_id|X
1|50
2|150
3|80
4|100
5|200
6|70
1 が最も古いもので、6 が最も新しいものです。したがって、X の合計が 280 である行 1、2、3 を取得したいのですが、1 つの select ステートメントでこれを達成することは可能ですか?
これは次のことを行う必要があります。
.mode columns
.headers on
CREATE TABLE foo (id INTEGER PRIMARY KEY AUTOINCREMENT, value INT);
INSERT INTO foo (value) VALUES (50), (150), (80), (100), (200), (70);
SELECT t1.id, t1.value
FROM foo t1 INNER JOIN foo t2 ON t2.id <= t1.id
GROUP BY t1.id, t1.value
HAVING SUM(t2.value) <= 300
ORDER BY t1.id;
SELECT
リターン:
id value
---------- ----------
1 50
2 150
3 80
選択したレコードを削除するには:
DELETE FROM foo WHERE id IN (
SELECT t1.id
FROM foo t1 INNER JOIN foo t2 ON t2.id <= t1.id
GROUP BY t1.id, t1.value
HAVING SUM(t2.value) <= 300);