开发者社区> 问答> 正文

请教 table /sql API, 窗口frist/last value

你好, 我有一个sql, select marketCode as market_code, CURRENT_TIMESTAMP as process_time, sum((CASE WHEN msgType = 'FUTURE' THEN matchedPrice WHEN msgType = 'SPOT' THEN matchedPrice ELSE 0.5 * (leg1Price + leg2Price) END) * matchedQty) as volume, sum(matchedQty) as currency_volume, first_value(matchedPrice) over (partition by marketCode ORDER BY transTime) as vopen, max(matchedPrice) as vhigh, min(matchedPrice) as vlow, last_value(matchedPrice) over (partition by marketCode ORDER BY transTime) as vclose from TickData where action = 'OrderMatched' and side = 'BUY' group by marketCode, HOP(transTime, INTERVAL '1' SECOND, INTERVAL '24' hour)

执行的时候报, matchedPrice not being grouped, 我的理解matchedPrice也是group function里的, 为什么还要在group里, 如果加了这个group column,我的结果会不对。

还是说我用的first/last 聚合函数错了? 我想要的是这个窗口的最早和最晚的那个值。 谢谢!*来自志愿者整理的flink

展开
收起
毛毛虫雨 2021-12-06 15:06:10 523 0
1 条回答
写回答
取消 提交回答
  • 这个query里 first_value(matchedPrice) over (partition..)是作用在紧跟后面的over 聚合上,over聚合的输入也就是 最外层groupBy 聚合的输出中, matchedPrice 是没有分组的,所以会有这个报错。*来自志愿者整理的flink

    2021-12-06 15:58:39
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Boot2.0实战Redis分布式缓存 立即下载
CUDA MATH API 立即下载
API PLAYBOOK 立即下载