MySQL:计算具有一个月偏移量的表中的数据

标签 mysql sql database

我对 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/

相关文章:

php - 在 mysql 字段中分隔的外部 ID

MYSQL 的 PHP 脚本作用于一个文件,而不作用于另一个文件

php - 如何将 SQL 中的流派列表传输到单独的数据库

sql - 如何在SQL中显示两个给定日期之间的所有日期

sql - 使用存储过程进行分页

javascript - 通过在另一台主机上打开 php 文件从 mysql 数据库中获取值(数组)

java - 如何在Java中创建一个具有可变列的数据库表?

PHP/MySQL : Using array elements in WHERE clause using prepared statements

python - 如何将Python Scrapy扩展中的数据插入到MySql数据库表中?

mysql - 使用 Rails 从组数组中检索拥有所有组的用户