【发布时间】:2011-01-30 05:07:33
【问题描述】:
我有一个 sqlite3 表,可以告诉我何时在游戏中获得/失去积分。样本/查询结果:
SELECT time,p2 FROM events WHERE p1='barrycarter' AND action='points'
ORDER BY time;
1280622305|-22
1280625580|-9
1280627919|20
1280688964|21
1280694395|-11
1280698006|28
1280705461|-14
1280706788|-13
[etc]
我现在想要我的跑分总数。鉴于我以 1000 分开始, 这是一种方法。
SELECT DISTINCT(time), (SELECT
1000+SUM(p2) FROM events e WHERE p1='barrycarter' AND action='points'
AND e.time <= e2.time) AS points FROM events e2 WHERE p1='barrycarter'
AND action='points' ORDER BY time
但这是非常低效的。有什么更好的方法来写这个?
MySQL 具有@variables,因此您可以执行以下操作:
SELECT time, @tot := @tot+points ...
但我使用的是 sqlite3 并且上面的内容无论如何都不是 ANSI 标准 SQL。
如果有人需要,更多关于 db 的信息:http://ccgames.db.94y.info/
编辑:感谢您的回答!我的困境:我让任何人运行任何
单个“http://ccgames.db.94y.info/”上的 SELECT 查询。我想给
他们有用地访问我的数据,但不允许
编写脚本或允许多个带有状态的查询。所以我需要一个
可以做积累的SQL查询。另见:
Existing solution to share database data usefully but safely?
【问题讨论】:
-
@Barry:欢迎来到这个网站。不幸的是,这个问题离题了,可能属于 StackOverflow。此网站的问题应符合常见问题解答中的标准:codereview.stackexchange.com/faq
-
在这种情况下,您最好在代码中处理结果查询时保留一个运行总计,而不是尝试让数据库来执行此操作。