追踪总和查询

时间:2011-03-01 20:44:23

标签: mysql sql sum

我希望总结一下日期,并且需要找到一种做3天尾随金额的方法,即当前日期和前两天的总和。我正在使用MariaDB,一个MYSQL分支。

以下是数据的子集;

select Date, Total from keywordSum limit 5;
+------------+--------+
| Date       | Total  |
+------------+--------+
| 2010-11-11 | 316815 |
| 2010-11-12 | 735305 |
| 2010-11-13 | 705116 |
| 2010-11-14 | 725020 |
| 2010-11-15 | 745378 |
+------------+--------+

我想得到与此类似的结果:

+------------+--------+-----------+
| Date       | Total  | 3DayTotal |
+------------+--------+-----------+
| 2010-11-11 | 316815 |    316815 |
| 2010-11-12 | 735305 |   1052120 |
| 2010-11-13 | 705116 |   1757236 |
| 2010-11-14 | 725020 |   2167441 |
| 2010-11-15 | 745378 |   2177514 |
+------------+--------+-----------+

如果前几天不存在,它甚至可以打印NaN或留空。任何想法或建议将不胜感激。

2 个答案:

答案 0 :(得分:3)

一种简单的方法是将表连接到自身。确保将其编入日期和总计的组合索引。

select t1.date
     , t1.total
     , t1.total 
      +coalesce(t2.total,0)
      +coalesce(t3.total,0)
  from theTable t1
  left 
  join theTable t2 on t1.date = date_Add(t2.date,interval 1 day)
  left
  join theTable t3 on t1.date = date_Add(t3.date,interval 2 day)

答案 1 :(得分:2)

使用MySQL变量的快捷方法

样本表:

create table keywordsum (date datetime, total int);
insert keywordsum values
('2010-11-11',316815),
('2010-11-12',735305),
('2010-11-13',705116),
('2010-11-14',725020),
('2010-11-15',745378);

查询:

select
  k.date, k.total, k.total + ifnull(@d1,0) + ifnull(@d2,0) running_total,
  @d2 := @d1,
  @d1 := k.total
from (select @d1 := null, @d2 := null) vars
cross join keywordsum k
order by k.date

(您可以随时选择此选项以仅获取前3列)