作者小头像 Lv.1
10 成长值

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

暂无数据
个人勋章
TA还没获得勋章~
成长雷达
10
0
0
0
0

个人资料

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

暂无数据

达成规则

他的回复:
last_value函数查询结果集是正确的。last_value函数取值是当前窗口内的最后一个值作为返回结果,当前sql查询中没有frame框架子句,默认框架选项是:RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.表示窗口的范围是排序后当前partition的第一行到当前行,相同partition的不同行的窗口函数的范围是不一样的,不同行查询得到的当前窗口内的最后一个值也是不一样的。因此当前sql的等效语句是:select nation, last_value(city) over (partition by nation order by date_time range between unbounded preceding and current row) from temp; 想要得到你的预期结果,可以不设置frame框架的起始行和终止行,这样在相同partition查询的结果是一致。因此查询sql可以修改为:select nation, last_value(city) over (partition by nation order by date_time range between unbounded preceding and unbounded following) from temp; first_value函数查询结果中相同partition中查询结果一致,因为排序后不同行的窗口范围不一样,但是起始行是一样的。last_value函数查询结果集是正确的。last_value函数取值是当前窗口内的最后一个值作为返回结果,当前sql查询中没有frame框架子句,默认框架选项是:RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.表示窗口的范围是排序后当前partition的第一行到当前行,相同partition的不同行的窗口函数的范围是不一样的,不同行查询得到的当前窗口内的最后一个值也是不一样的。因此当前sql的等效语句是:select nation, last_value(city) over (partition by nation order by date_time range between unbounded preceding and current row) from temp;想要得到你的预期结果,可以不设置frame框架的起始行和终止行,在相同partition查询的结果是一致。因此查询sql可以修改为:select nation, last_value(city) over (partition by nation order by date_time range between unbounded preceding and unbounded following) from temp; first_value函数查询结果中相同partition中查询结果一致,因为排序后不同行的窗口范围不一样,但是起始行是一样的。