按月的最后一天创建每月标签值

Create a Monthly Label value by last day of month

我有一个应用了

的数据集
row_num() partition by month order by day_date desc

我的结果是这样的,不限于——仅举个例子

Month        Day            User        Active        row_num
Jan-2021     2021-01-28     A           yes            1
Jan-2021     2021-01-27     A           yes            2
Jan-2021     2021-01-28     A           yes            3
Feb-2021     2021-02-25     A           no             1
Feb-2021     2021-02-15     A           yes            2
Feb-2021     2021-02-01     A           no             3
Jan-2021     2021-01-28     B           yes            1
Jan-2021     2021-01-28     B           yes            2
Jan-2021     2021-01-28     B           yes            3
Feb-2021     2021-02-28     B           no             1
Feb-2021     2021-02-08     B           yes            2

我想添加的附件是,如果用户在他们的月末活跃,我想将月份标记为活跃。逻辑是 if row_num = 1 and active = yes, label full month, yes versa row_num = 1 and active = no label month_active = no.

我目前卡在如何将值应用于月份的分区,但在每日级别进行评估。提前欣赏一下。

Month        Day            User        Active        row_num        month_active
Jan-2021     2021-01-28     A           yes            1             yes
Jan-2021     2021-01-27     A           yes            2             yes
Jan-2021     2021-01-28     A           yes            3             yes
Feb-2021     2021-02-25     A           no             1             no
Feb-2021     2021-02-15     A           yes            2             no
Feb-2021     2021-02-01     A           no             3             no             
Jan-2021     2021-01-28     B           yes            1             yes
Jan-2021     2021-01-28     B           yes            2             yes
Jan-2021     2021-01-28     B           yes            3             yes
Feb-2021     2021-02-28     B           no             1             no
Feb-2021     2021-02-08     B           yes            2             no

一种方法是使用 first_value():

select t.*,
       first_value(active) over (partition by month order by day desc) as month_active
from t;

或者,如果您将查询用作子查询,则可以使用:

select t.*,
       max(case when seqnum = 1 then active end) over (partition by month) as month_active
from t;