【发布时间】:2020-07-22 08:02:08
【问题描述】:
我有一张如下表。
+-------+-------+--------------+---------------+
| Col_1 | Col_2 | Refresh_Date | Refresh_Value |
+-------+-------+--------------+---------------+
| AE | A1 | 2019-12-01 | 1 |
| AE | A1 | 2020-01-01 | 3 |
| AE | A1 | 2020-02-01 | 5 |
| AE | A1 | 2020-03-01 | 7 |
| AE | A1 | 2020-04-01 | 12 |
| AE | A1 | 2020-05-01 | 14 |
| AE | A1 | 2020-06-01 | 11 |
| AE | A1 | 2020-07-01 | 15 |
+-------+-------+--------------+---------------+
我需要从最后一个日期开始的最近 3 个月中获取第一个 Refresh_value(基于 Refresh_date),并且应该有 2 个额外的列(Group 和 Refresh_Value_Min),其中第一列将包含每过去 3 个月的第一个值,另一列的值说明这些日期属于哪个组。
预期输出
+-------+-------+--------------+---------------+-------+-------------------+
| Col_1 | Col_2 | Refresh_Date | Refresh_Value | Group | Refresh_Value_Min |
+-------+-------+--------------+---------------+-------+-------------------+
| AE | A1 | 2019-12-01 | 1 | Grp3 | 1 |
| AE | A1 | 2020-01-01 | 3 | Grp3 | 1 |
| AE | A1 | 2020-02-01 | 5 | Grp2 | 5 |
| AE | A1 | 2020-03-01 | 7 | Grp2 | 5 |
| AE | A1 | 2020-04-01 | 12 | Grp2 | 5 |
| AE | A1 | 2020-05-01 | 14 | Grp1 | 14 |
| AE | A1 | 2020-06-01 | 11 | Grp1 | 14 |
| AE | A1 | 2020-07-01 | 15 | Grp1 | 14 |
+-------+-------+--------------+---------------+-------+-------------------+
我尝试了下面的代码,它会在当前行中给出上个月第 3 个月的值,但我需要像上面一样的输出。
first_value(Refresh_Value) over (partition by col_1,col_2 order by Refresh_Date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
有人可以帮忙吗?
如果有任何问题,请告诉我。
【问题讨论】:
标签: sql hive partitioning