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
作为防止重复值的唯一键