博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于spark聚合函数与lag窗口函数同时使用的一个问题
阅读量:6257 次
发布时间:2019-06-22

本文共 727 字,大约阅读时间需要 2 分钟。

hot3.png

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

你可能感兴趣的文章
bash脚本case与函数
查看>>
我的学习计划
查看>>
理解 Go 语言中的方法和接收者
查看>>
iView 发布 2.0.0-rc.16 版本
查看>>
React表单组件
查看>>
从0到1学习node(八)之异步控制工具async
查看>>
Android 运行时权限库
查看>>
网易漫画Swift混编实践
查看>>
如何针对业务设计架构?——QCon热点专题前瞻
查看>>
你的可用性达标了吗?云端业务性能高可用的深度实践
查看>>
Mozilla开发全新的公开网络API WebXR 来实现增强现实
查看>>
用户超5亿,三年投10亿,开发者如何抢滩支付宝小程序蓝海?
查看>>
[使用 Weex 和 Vue 开发原生应用] 2 编写独立页面
查看>>
Cosmos DB:全球分布式数据库
查看>>
Scrum联盟的新任全球营销副总裁访谈
查看>>
从把事做对到做对的事
查看>>
悟空:用Go语言编写的全文搜索引擎
查看>>
.NET 4.6的RyuJIT编译器中又发现两个严重的Bug
查看>>
Rust发布1.32版本,跟踪、模块化、宏等方面均有改进
查看>>
Go语言开源这九年:它是不是你最喜欢的语言?
查看>>