我已经看到了与mysql类似的问题,但我几乎找不到解决sqllite问题的方法。
我的样本表,
-----------------------------
ID | Product Name | Price
-----------------------------
1 A 2
2 B 2
3 C 1
4 D 3
5 E 2
这里我需要获取行,直到price列的总数等于或小于5的升序。
答案 0 :(得分:5)
您可以使用下面的Product ID
和ORDER BY Product ID
来执行累计总计:
SELECT p1.ID, p1.ProductName, p1.Price,
(SELECT SUM(p2.Price) FROM Products p2 WHERE p1.ID >= p2.ID ORDER BY p2.ID ) as RunningTotal
FROM Products p1
WHERE RunningTotal <= 5
ORDER BY p1.ID
请参阅Fiddle Demo
或使用下面的Price
和ORDER BY Price
:
SELECT p1.ID, p1.ProductName, p1.Price,
(SELECT SUM(p2.Price) FROM Products p2 WHERE p1.Price >= p2.Price ORDER BY Price )
as RunningTotal
FROM Products p1
WHERE RunningTotal <= 5
ORDER BY p1.Price;
答案 1 :(得分:0)
最好在代码中执行它,因为据我所知,SQLite不支持简单的方法来执行累积求和。您可以在价格列上创建索引。
然后运行像
这样的查询SELECT * FROM <table> ORDER BY Price
请注意,这不会急切地从数据库中获取所有行,而只是为您提供游标。继续从光标中取出下一行,直到达到所需的总和。