我需要运行一个查询:
数据
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
我知道我可以通过在获取日期行之后在循环内运行另一个查询来计算。但我想在一个查询中计算。数据非常庞大,数百万条记录并且每天都在增长。
我想尽可能地优化查询,因为它是系统的瓶颈,系统在运行每行的每个查询时都会卡住。基本上我在每行计算时都做不了什么。
答案 0 :(得分:2)
单个查询就是这样的。我希望date
和reportDate
列上有一个索引:
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);