Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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
Php MySQL计算未来6个月从上一个上传日数据的增量(差异)_Php_Mysql_Sql - Fatal编程技术网

Php MySQL计算未来6个月从上一个上传日数据的增量(差异)

Php MySQL计算未来6个月从上一个上传日数据的增量(差异),php,mysql,sql,Php,Mysql,Sql,我需要运行一个查询,该查询将: 计算前一天报告和当前报告之间的差异“Δ”,例如:11月23日,值为10,11月22日为9,因此Δ=+1,增加1 并在前一天起的所有天(最多6个月)执行此操作 资料 日期值报告日期 1-8-2017 142 1-8-2017 2-8-2017 69 1-8-2017 3-8-2017 57 1-8-2017 4-8-2017 44 1-8-2017 日期值报告日期 1-8-2017 136 2-

我需要运行一个查询,该查询将:

  • 计算前一天报告和当前报告之间的差异“Δ”,例如:11月23日,值为10,11月22日为9,因此Δ=+1,增加1
  • 并在前一天起的所有天(最多6个月)执行此操作
资料

日期值报告日期
1-8-2017    142   1-8-2017
2-8-2017     69   1-8-2017
3-8-2017     57   1-8-2017
4-8-2017     44   1-8-2017      
日期值报告日期
1-8-2017    136   2-8-2017
2-8-2017    139   2-8-2017
3-8-2017    104   2-8-2017
4-8-2017     66   2-8-2017
要求的结果

报告日期:2017年2月8日
日期值增量
1-8-2017    136    -6
2-8-2017    139    70
3-8-2017    104    47
4-8-2017     66    22
我知道我可以通过在获取日期行后在循环内运行另一个查询来计算。但我想在一个查询中进行计算。数据非常庞大,有数百万条记录,每天都在增长


我希望尽可能地优化查询,因为它是系统的瓶颈,并且在为每行运行每个查询时,系统会被卡住。基本上,当当前按每行计算时,我什么也做不了。

一个查询就是这样的。我希望在
date
reportDate
列上有一个索引:

SET@date:=“2017-08-02”;
选择t1.date、t2.value、t2.value-t1.value作为增量
作为t1从测试开始
以t2的形式加入测试(t1.date=t2.date)
其中t2.reportDate=@date
t1.reportDate=DATE_SUB(@DATE,间隔1天);

一个查询就是这样的。我希望在
date
reportDate
列上有一个索引:

SET@date:=“2017-08-02”;
选择t1.date、t2.value、t2.value-t1.value作为增量
作为t1从测试开始
以t2的形式加入测试(t1.date=t2.date)
其中t2.reportDate=@date
t1.reportDate=DATE_SUB(@DATE,间隔1天);

历史值是否会改变?如果你能保证(比如)不会有超过7天的变化,那么你可以预先计算截至该日期的所有数据,那么你最多只能计算每天7天的值。是的,历史值可以在任何需要的地方用自定义值进行更改。OK,为什么不创建一个只包含增量的标准化表,然后,每当任何数据(历史数据或非历史数据)发生更改时,也存储增量,然后您的查询就可以使用增量表了。历史值是否发生过更改?如果你能保证(比如)不会有超过7天的变化,那么你可以预先计算截至该日期的所有数据,那么你最多只能计算每天7天的值。是的,历史值可以在任何需要的地方用自定义值进行更改。OK,为什么不创建一个只包含增量的标准化表,然后,每当任何数据(历史数据或非历史数据)发生更改时,也存储增量,然后,您的查询可以只使用增量表。是
date
reportDate
是索引,也是
datereportdate
作为防止重复值的唯一键
date
reportDate
是索引,也是
datereportdate
作为防止重复值的唯一键