【发布时间】:2018-09-25 16:46:32
【问题描述】:
这是一个转贴,以帮助澄清我的问题。我正在处理时间序列数据,我需要参考前一年的数据。在 excel 中,我只会使用 vlookup 或索引匹配。
这是我的桌子
+------------+--------------+--------------+------+-------+
| date | unique_id | prev_year_id | id | value |
+------------+--------------+--------------+------+-------+
| 2016-01-01 | 1-2016-01-01 | 1-2015-01-01 | 1 | 7 |
| 2016-01-01 | 2-2016-01-01 | 2-2015-01-01 | 2 | 19 |
| 2016-01-01 | 3-2016-01-01 | 3-2015-01-01 | 3 | 6 |
| 2016-01-01 | 4-2016-01-01 | 4-2015-01-01 | 4 | 13 |
| 2016-01-01 | 5-2016-01-01 | 5-2015-01-01 | 5 | 5 |
| 2017-01-01 | 1-2017-01-01 | 1-2016-01-01 | 1 | 17 |
| 2017-01-01 | 2-2017-01-01 | 2-2016-01-01 | 2 | 8 |
| 2017-01-01 | 3-2017-01-01 | 3-2016-01-01 | 3 | 20 |
| 2017-01-01 | 4-2017-01-01 | 4-2016-01-01 | 4 | 3 |
| 2017-01-01 | 5-2017-01-01 | 5-2016-01-01 | 5 | 0 |
| 2018-01-01 | 1-2018-01-01 | 1-2017-01-01 | 1 | 4 |
| 2018-01-01 | 2-2018-01-01 | 2-2017-01-01 | 2 | 21 |
| 2018-01-01 | 3-2018-01-01 | 3-2017-01-01 | 3 | 7 |
| 2018-01-01 | 4-2018-01-01 | 4-2017-01-01 | 4 | 3 |
| 2018-01-01 | 5-2018-01-01 | 5-2017-01-01 | 5 | 6 |
+------------+--------------+--------------+------+-------+
我的专栏是:
日期, unique_id(这是 id 和 date 的连接;主键), prev_year_id(id 和日期的连接 - 间隔 1 年), id, 价值
我需要帮助创建一个语句来匹配 prev_year_id 和 unique_id 并返回行的值。
第一年会有差距,因为没有任何数据可以参考,但在第一年之后,每个 prev_year_value 都会匹配上一年的 unique_id
这是我想象的最终结果:
+------------+--------------+--------------+------+-------+-----------------+
| date | unique_id | prev_year_id | id | value | prev_year_value |
+------------+--------------+--------------+------+-------+-----------------+
| 2016-01-01 | 1-2016-01-01 | 1-2015-01-01 | 1 | 7 | null |
| 2016-01-01 | 2-2016-01-01 | 2-2015-01-01 | 2 | 19 | null |
| 2016-01-01 | 3-2016-01-01 | 3-2015-01-01 | 3 | 6 | null |
| 2016-01-01 | 4-2016-01-01 | 4-2015-01-01 | 4 | 13 | null |
| 2016-01-01 | 5-2016-01-01 | 5-2015-01-01 | 5 | 5 | null |
| 2016-01-01 | 1-2017-01-01 | 1-2016-01-01 | 1 | 17 | 7 |
| 2016-01-01 | 2-2017-01-01 | 2-2016-01-01 | 2 | 8 | 19 |
| 2016-01-01 | 3-2017-01-01 | 3-2016-01-01 | 3 | 20 | 6 |
| 2016-01-01 | 4-2017-01-01 | 4-2016-01-01 | 4 | 3 | 13 |
| 2016-01-01 | 5-2017-01-01 | 5-2016-01-01 | 5 | 0 | 5 |
| 2016-01-01 | 1-2018-01-01 | 1-2017-01-01 | 1 | 4 | 17 |
| 2016-01-01 | 2-2018-01-01 | 2-2017-01-01 | 2 | 21 | 8 |
| 2016-01-01 | 3-2018-01-01 | 3-2017-01-01 | 3 | 7 | 20 |
| 2016-01-01 | 4-2018-01-01 | 4-2017-01-01 | 4 | 3 | 3 |
| 2016-01-01 | 5-2018-01-01 | 5-2017-01-01 | 5 | 6 | 0 |
+------------+--------------+--------------+------+-------+-----------------+
这是我的声明..
SELECT A.*, B.value as 'prev_year_value'
FROM table1 A
INNER JOIN table1 B ON A.current_month_code = B.`prev_year_code
返回结果很慢,它返回的是下一年的值,而不是上一年。
【问题讨论】:
-
请在您的问题中直接包含所有数据,不要发布链接。
-
完成了,我是第一次在 Stack Overflow 上发帖,所以如果有什么我可以提供的,请告诉我。