我希望总结一下日期,并且需要找到一种做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或留空。任何想法或建议将不胜感激。
答案 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列)