【发布时间】:2016-01-14 21:45:08
【问题描述】:
我有一个包含两列的表 - 日期和金额(使用情况)。我想将我的使用情况与去年的比较
数据
Date Amount
01-01-2015 23
02-01-2015 24
03-01-2015 19
04-01-2015 11
05-01-2015 5
06-01-2015 23
07-01-2015 21
08-01-2015 6
09-01-2015 26
10-01-2015 9
[...]
01-01-2016 30
02-01-2016 19
03-01-2016 5
04-01-2016 8
05-01-2016 15
06-01-2016 27
07-01-2016 19
08-01-2016 21
09-01-2016 24
10-01-2016 27
[until today's date]
sql 语句应该返回到今天为止的结果,并且 diff 应该是一个运行总计 - 2016 年一天的金额减去 2015 年同一天的金额,再加上之前的差额。假设今天是 1 月 10 日,结果将是:
Day Diff
01-01-2016 7 (30-23)
02-01-2016 2 (19-24+7)
03-01-2016 -12 (5-19+2)
04-01-2016 -15 (8-11-12)
05-01-2016 -5 (and so on...)
06-01-2016 -1
07-01-2016 -3
08-01-2016 12
09-01-2016 10
10-01-2016 28
当数据都在一个表中时,我无法弄清楚这样做......
谢谢
【问题讨论】:
-
不幸的是,除非您使用存储过程(sqlite3 本身没有存储过程),否则保持运行总计是 SQL(任何类型的)不太擅长的一件事。在 MySQL 中,您也可以使用 @variables 来克服此限制,但一般情况下,您需要在此处使用外部过程语言。
-
您可以通过在等于或小于日期的天数将表连接到自身并执行 sum() 来获得运行总计。您可以通过按日和月将一年的运行总和与下一年的运行总和相加来获得逐年比较。
-
@Rabbit 你能告诉我怎么做吗?
-
这不是supported date formats 之一。
-
@something_new 到目前为止您尝试了什么?当有人没有尝试自己解决问题时,我没有发布完整代码的习惯。