Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在配置单元中生成MTD(月至今)滚动总和?_Sql_Hive_Hiveql_Rolling Computation - Fatal编程技术网

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