0

如果我们有一个表,其中有一列名为 X 包含 int。现在我想尽可能多地选择(实际上我想删除)X之和但不超过300的最旧的N行?

  _id|X
    1|50
    2|150
    3|80
    4|100
    5|200
    6|70

其中 1 是最旧的,6 是最新的。所以我想得到第 1、2、3 行,其 X 的总和为 280。是否可以通过一个 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 回答