presto 不支持窗口函数 count(distinct ) 替换方案

思路:

  1. array_agg(“role_uid”) over( ORDER BY sort asc ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) array_role ;通过

    sort 升序排列获取当前列之前的所有 role_uid ,通过 array_agg聚合,在通过 cardinality(array_distinct( array_role )) ,array_distinct 进行角色的去重,cardinality统计角色个数,在通过max() 获取分组数据

 
SELECT "role_uid","task_sid" ,"task_sid@sort" sort,cardinality(array_distinct(dk)) "累积" from  (
SELECT  "role_uid","task_sid","task_sid@task_name","task_sid@sort" 
,LEAD("task_sid",1,1 ) over(partition by  "role_uid" ORDER BY  "task_sid@sort" asc ) lead
,  array_agg("role_uid") over(  ORDER BY  cast("task_sid@sort" as bigint ) asc ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) dk
FROM v_event_119 a,ta_dim.dim_119_0_124593 b
WHERE "$part_event"='role_task'AND  b."task_sid@task_id"=a."task_sid" AND  ${PartDate:date1} 
)k 

image-20240311145436492

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值