hivesql中已知授信年月、对应授信人数,生成新一列,分裂成从授信年月到当前日期年月的逐月的数据行 表名pd_data.credit_mob_left_table 字段c_ym 表示授信年月
时间: 2024-12-23 09:24:46 浏览: 4
在Hive SQL中,要基于已知的`c_ym`(授信年月)字段生成从该年月到当前日期的逐月数据行,可以使用自连接和DATEDIFF函数来实现。假设`credit_mob_left_table`表有日期相关的字段,如`current_date`。这里是一个可能的查询示例:
```sql
WITH start_month AS (
SELECT c_ym,
DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH) AS start_date
FROM credit_mob_left_table
WHERE DATEDIFF(CURRENT_DATE(), c_ym) >= 0 -- 保证start_date不早于c_ym
)
SELECT c_ym,
start_date + INTERVAL n MONTH AS month_range
FROM start_month
CROSS JOIN UNNEST(GENERATE_ARRAY(1, DATEDIFF(CURRENT_DATE(), c_ym))) AS n
ORDER BY c_ym, month_range;
```
这个查询做了以下几步操作[^1]:
1. 定义了一个名为`start_month`的子查询,其中包含了从当前月份开始向前推一个月的`start_date`。
2. 使用`UNNEST`和`GENERATE_ARRAY`生成一个数组,其范围是从1到`DATEDIFF(CURRENT_DATE(), c_ym)`,表示从`c_ym`到`current_date`之间的所有月数。
3. 自连接`start_month`与生成的数组,为每个`c_ym`组合生成相应月数的所有`month_range`。
注意,此查询假设`current_date`字段存在并能够提供当前日期。如果`credit_mob_left_table`没有这样的字段,可能需要从其他表或者视图中获取。
阅读全文