有这样一个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。