Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用量与去年相比_Sql_Date_Sqlite - Fatal编程技术网

Sql 使用量与去年相比

Sql 使用量与去年相比,sql,date,sqlite,Sql,Date,Sqlite,我有一个包含两列的表-日期和用量。我想把我的使用量和去年的比较一下 资料 sql语句应该返回到今天为止的结果,差异应该是一个连续的总数——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

我有一个包含两列的表-日期和用量。我想把我的使用量和去年的比较一下

资料

sql语句应该返回到今天为止的结果,差异应该是一个连续的总数——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
当数据都在一个表中时,我不知道该怎么做

谢谢你试试这个

SELECT t1.date Day,SUM(t2.Diff) FROM
amounts t1
INNER JOIN
(SELECT amounts.date Day, amounts.amount-prevamounts.amount Diff
FROM amounts inner join amounts prevamounts 
ON amounts.date=date(prevamounts.date,'+1 years')) t2
ON t2.Day<=t1.date
group by t1.date;
此处演示: 试试这个

SELECT t1.date Day,SUM(t2.Diff) FROM
amounts t1
INNER JOIN
(SELECT amounts.date Day, amounts.amount-prevamounts.amount Diff
FROM amounts inner join amounts prevamounts 
ON amounts.date=date(prevamounts.date,'+1 years')) t2
ON t2.Day<=t1.date
group by t1.date;
此处演示:

不幸的是,任何类型的SQL都不擅长保持运行总数,除非您使用sqlite3本机没有的存储过程。在MySQL中,您也可以使用@variables来克服这一限制,但是,一般来说,您需要在这里使用一种外部过程语言。您可以通过在等于或小于日期的日期将表连接到自身并进行求和来获得一个运行总数。通过将一年的运行总数与下一年的运行总数逐日逐月相加,可以得到一年与一年的比较结果。@Rabbit你能告诉我怎么做吗?这不是最新的方法之一。@something\u到目前为止,你做了哪些尝试?我不习惯在有人没有亲自尝试解决问题时发布完整的代码。不幸的是,任何类型的SQL都不擅长保持运行总数,除非您使用sqlite3本机没有的存储过程。在MySQL中,您也可以使用@variables来克服这一限制,但是,一般来说,您需要在这里使用一种外部过程语言。您可以通过在等于或小于日期的日期将表连接到自身并进行求和来获得一个运行总数。通过将一年的运行总数与下一年的运行总数逐日逐月相加,可以得到一年与一年的比较结果。@Rabbit你能告诉我怎么做吗?这不是最新的方法之一。@something\u到目前为止,你做了哪些尝试?我不习惯在有人没有亲自尝试解决问题时发布完整的代码。不给出运行总数。根据其他用户的说法,可能不想只使用SQLite。你检查过我制作的SQLFIDLE演示吗?它完全返回需求。请问有什么遗漏或错误?它没有准确返回要求。请再次检查OP中的结果。您的第一行是正确的,后面的所有内容都是错误的。@Theermostafa列Diff应该是一个连续的总计,而不仅仅是每月的difference@something_new对不起,我没有注意到累计数。我现在更正了解决方案。请重新检查并更新您的投票。。。谢谢你,我没有给出跑步总数。根据其他用户的说法,可能不想只使用SQLite。你检查过我制作的SQLFIDLE演示吗?它完全返回需求。请问有什么遗漏或错误?它没有准确返回要求。请再次检查OP中的结果。您的第一行是正确的,后面的所有内容都是错误的。@Theermostafa列Diff应该是一个连续的总计,而不仅仅是每月的difference@something_new对不起,我没有注意到累计数。我现在更正了解决方案。请重新检查并更新您的投票。。。谢谢你的评论