关于spark聚合函数与lag窗口函数同时使用的一个问题

有这样一个sql语句:

SELECT
    订单号, 
    unify_date(concat(year(支付时间), " ", month(支付时间), " ", day(支付时间))),
    用户优惠券表用户UID,
    lag(max_date(支付时间), 1) over (partition by 用户优惠券表用户UID order by (支付时间))                  
FROM
    优惠券表            
GROUP BY
    订单号, year(支付时间), month(支付时间), day(支付时间), 用户优惠券表用户UID 
limit 1000

执行后会报错:

expression '支付时间' is neither present in the group by, nor is it an aggregate function. Add to group by or wrap in first() (or first_value) if you don't care which value you get.;

    通过在lag窗口函数中的order by里加 first函数的方式,让这个语句能够查询出结果。但是我研究了很久,没有研究明白这么做是为什么。

    我猜测,支付时间这个字段用在了聚合函数中,但是它本身却不是group by里面的任意一个维度,添加first函数是为了忽略掉`支付时间`的排序,随便取一个数值显示罢了。

    暂时只研究了这么多,待以后研究透了再来修改blog。

    

 

 

 

 

转载于:https://my.oschina.net/justfairytale/blog/1538807

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值