0

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 ステートメントでこれを達成することは可能ですか?

4

1 に答える 1

1

これは次のことを行う必要があります。

.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);
于 2012-09-29T09:59:11.217 に答える