我对 SQL 还很陌生,所以如果这是一个新手问题,请原谅我。我正在构建一个存储过程,该过程从按月存储数据的表中进行查询。以下是表格的简化示例:
+------------+------------+------------+
| date | value_A | value_B |
+------------+------------+------------+
| 2014-01-01 | 100 | 200 |
| 2014-02-01 | 200 | 400 |
| 2014-03-01 | 300 | 600 |
| 2014-04-01 | 400 | 800 |
| 2014-05-01 | 500 | 1000 |
| 2014-06-01 | 600 | 1200 |
| 2014-07-01 | 700 | 1400 |
| ... | ... | ... |
+------------+------------+------------+
在该过程中,我需要计算:(Value_A/Value_B
)。然而,Value_B 需要滞后一个月。因此,在上面的示例中,2014 年 2 月的计算结果为:(2014 年 2 月的 Value_A/Value_B 或 2014 年 1 月
) 或 (200/200
)。 2014 年 3 月的计算结果为:(2014 年 3 月的 Value_A/2014 年 2 月的 Value_B
) 或 (300/400
),依此类推。希望这是有道理的。
如果我只查询特定月份,那么做起来并不会太困难,因为我可以在过程中使用 CASE
语句。但由于我需要检索按月分组的一年数据,我有点困惑。
如果没有 Value_B 一个月的滞后,我的 SQL 语句设置如下:
SELECT ex.`date `, ex.value_A / ex.value_B AS calc
FROM example_table ex
WHERE ex.`date` BETWEEN '2014-03-01' AND '2015-02-01'
GROUP BY ex.`date`
我不知道从这里该去哪里。我尝试过不同的连接和联合,但没有任何运气。我是否需要分别查询 Value_A 和 Value_B 各自的日期范围,然后以某种方式将它们合并在一起进行计算?还是我让这件事变得比实际情况更困难?
感谢您的帮助。
最佳答案
SELECT t.date, t.value_A/t2.value_B AS calc
FROM table t JOIN table t2 ON t.date = DATE_ADD(t2.date, INTERVAL 1 MONTH)
关于MySQL:计算具有一个月偏移量的表中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28972623/