【发布时间】:2017-06-28 12:22:32
【问题描述】:
我在 Greenplum DB 工作。
在 First_value 窗口函数中得到奇怪的结果,当按子句按顺序传递所有行中通用的字符串值时,它总是返回第一次插入的行,但理想情况下它应该返回任何值。下面是我的代码...
create temporary table test_first_value (id int,statename
varchar(50),episodeid int,
episodedate date) distributed by (id);
insert into test_first_value values(12,'MP',9863,'2015-11-06');
insert into test_first_value values(12,'MP',98123,'2009-11-06');
insert into test_first_value values(12,'MP',90123,'2017-03-06');
insert into test_first_value values(12,'MP',44567,'2013-03-17');
insert into test_first_value values(13,'MP',189300,'2013-03-17');
insert into test_first_value values(13,'MP',443467,'2016-03-19');
它总是返回第一个插入的相同值,即 episodeid = 9863 用于 id = 12 和 episodeid = 189300 用于 id = 13
Select *,
First_value(episodeid) over(partition by id order by statename) as
first_episodeid,
First_value(episodedate) over(partition by id order by statename) as
first_episodedate
from
test_first_value;
现在,如果我更改插入顺序,那么它将始终返回首先插入的行值,即 episodeid = 98123 for id = 12 和 episodeid = 443467 for id = 13
delete from test_first_value;
insert into test_first_value values(12,'MP',98123,'2009-11-06');
insert into test_first_value values(12,'MP',90123,'2017-03-06');
insert into test_first_value values(12,'MP',44567,'2013-03-17');
insert into test_first_value values(12,'MP',9863,'2015-11-06');
insert into test_first_value values(13,'MP',443467,'2016-03-19');
insert into test_first_value values(13,'MP',189300,'2013-03-17');
Select *,
First_value(episodeid) over(partition by id order by statename) as
first_episodeid,
First_value(episodedate) over(partition by id order by statename) as
first_episodedate
from
test_first_value;
请帮助我,我做错了什么。
【问题讨论】:
-
编辑您的问题并显示“奇怪的结果”。您还应该说明您想要获得什么结果。
-
我想你可能需要
partition by id,statename order by episodedate -
@Pra 你只使用 statename 来排序。所以你无法预测在这种情况下你会得到什么。
-
@Gordon Linoff 已添加结果。
标签: greenplum