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

时间:2017-11-23 14:22:24

标签: php mysql sql

我需要运行一个查询:

  • 计算前一天报告与当前报告之间的差异“Δ”,例如:11月23日,值为10,而11月22日为9,所以Δ= +1,增加1
  • 并且从前一天起持续6个月的所有日子

数据

date      value reportDate
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      

date      value reportDate
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

必填结果

Report Date: 2-8-2017   

date      value Delta
1-8-2017    136    -6
2-8-2017    139    70
3-8-2017    104    47
4-8-2017     66    22

我知道我可以通过在获取日期行之后在循环内运行另一个查询来计算。但我想在一个查询中计算。数据非常庞大,数百万条记录并且每天都在增长。

我想尽可能地优化查询,因为它是系统的瓶颈,系统在运行每行的每个查询时都会卡住。基本上我在每行计算时都做不了什么。

1 个答案:

答案 0 :(得分:2)

单个查询就是这样的。我希望datereportDate列上有一个索引:

SET @date := '2017-08-02';

SELECT t1.date, t2.value, t2.value - t1.value AS delta
FROM test AS t1 
JOIN test AS t2 ON (t1.date = t2.date)
WHERE t2.reportDate = @date
AND t1.reportDate = DATE_SUB(@date, INTERVAL 1 DAY);