Sql 如何在配置单元中生成MTD(月至今)滚动总和?
我原以为以前会有人问这个问题,但不知怎么的,我什么也找不到。请让我知道这是否重复 假设我有一张表格,格式如下Sql 如何在配置单元中生成MTD(月至今)滚动总和?,sql,hive,hiveql,rolling-computation,Sql,Hive,Hiveql,Rolling Computation,我原以为以前会有人问这个问题,但不知怎么的,我什么也找不到。请让我知道这是否重复 假设我有一张表格,格式如下 | event_date | v | |------------+---| | 2021-01-01 | 1 | | 2021-01-02 | 1 | | .......... | . | | 2021-01-31 | 1 | | 2021-02-01 | 1 | | 2021-02-02 | 1 | 我想计算每个月的滚动金额。因此,输出如下(假设所有行的v=1): 这类似于计算滚动3
| event_date | v |
|------------+---|
| 2021-01-01 | 1 |
| 2021-01-02 | 1 |
| .......... | . |
| 2021-01-31 | 1 |
| 2021-02-01 | 1 |
| 2021-02-02 | 1 |
我想计算每个月的滚动金额。因此,输出如下(假设所有行的v=1
):
这类似于计算滚动30天的总和,但实际上是滚动1个月
我认为这可以通过使用hive的窗口功能和
interval
命令来完成,但是在interval
命令中找不到任何有用的文档。我也期待着做QTD和YTD汇总,因此希望能以灵活的方式进行。使用分析函数,按substr(事件日期,1,7)按事件日期排序:
select sum(v) over (partition by substr(event_date, 1,7) order by event_date) as rolling_sum
您需要一个如下所示的累积总和:
select t.*,
sum(val) over (partition by year(event_date), month(event_date)
order by event_date
) as mtd
from t;
这很容易推广到YTD和QTD
或者,如果您更喜欢较短的格式:
sum(val) over (partition by last_day(event_date)
order by event_date
) as mtd
我强烈建议您在日期列上使用日期函数。为什么我没有想到这一点。。。这太容易了
sum(val) over (partition by last_day(event_date)
order by event_date
) as mtd