我在向一个相对较大的SELECT请求添加整体递增行时遇到了麻烦。 该表看起来像:
+-----------+------------+
| Date | Amount |
+-----------+------------+
| 10:11:15 | 25 |
| 10:11:25 | 150 |
| 10:11:35 | 120 |
| 10:11:45 | 90 |
| 10:11:55 | 100 |
+-----------+------------+
我想添加一个新列,其中包含当时的总量,例如:
+-----------+------------+------------+
| Date | Amount | Overall |
+-----------+------------+------------+
| 10:11:15 | 25 | 25 |
| 10:11:25 | 150 | 175 |
| 10:11:35 | 120 | 295 |
| 10:11:45 | 90 | 385 |
| 10:11:55 | 100 | 485 |
+-----------+------------+------------+
该表按时间排序,因此最后一行将显示该时间戳之前的总量。 找不到任何解决方案,如果你能提供帮助,我会很高兴,所以我不需要硬编码。
答案 0 :(得分:0)
使用子选项对项目+所有旧项目求和。
select Date, amount, (select sum(amount) from yourtable
where date <= t1.date) as Overall
from yourtable as t1
或者通过以下方式加入群组:
select t1.Date, t1.amount, sum(t2.amount)
from yourtable as t1 join yourtable as t2 on t2.date <= t1.date
group by t1.date, t1.amount
答案 1 :(得分:0)
两个地方:
1,数据引擎:
你可以编写像GetOverall_ForThisROw()
这样的函数
只需sum()
和where PK
或some ID < something
2,编程语言:
你可以将它放在你的PHP代码中,我认为这可以保存数据库。
在我看来,从数据库中获取原始数据,然后在你的php中运行一个简单的代码将为你提供最佳性能。