Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 最近非空列的总和(带有“忽略空值”的窗口函数)_Postgresql - Fatal编程技术网

Postgresql 最近非空列的总和(带有“忽略空值”的窗口函数)

Postgresql 最近非空列的总和(带有“忽略空值”的窗口函数),postgresql,Postgresql,我正在使用PostgreSQL 9.1.9 在我正在处理的项目中,一些最新的记录具有空列,因为创建该行时该信息不可用。我有一个视图,其中列出了属于组成员的行的总和。到目前为止,该视图显示了最新列的总和,如果这些列是最新的值,则使用空值。比如说, table1 group_name | member ------------------- group1 | Andy group1 | Bob table2 name | stat_date | col1 | col2 | co

我正在使用PostgreSQL 9.1.9

在我正在处理的项目中,一些最新的记录具有空列,因为创建该行时该信息不可用。我有一个视图,其中列出了属于组成员的行的总和。到目前为止,该视图显示了最新列的总和,如果这些列是最新的值,则使用空值。比如说,

table1

group_name | member
-------------------
group1     | Andy
group1     | Bob

table2

name | stat_date | col1 | col2 | col 3
--------------------------------------
Andy | 6/19/13   | null |    1 |     2
Andy | 6/18/13   |  100 |    3 |     5
Bob  | 6/19/13   |   50 |    9 |    12
Bob  | 6/18/13   |  111 |   31 |    51

-- creating view would be something like this... 
create view v_grouped as 
select table1.group_name, stat_date, 
sum(col1) as col1_sum, sum(col2) as col2_sum, sum(col3) as col3_sum
from table1
join table2 on table1.member = table2.name
group by table1.group_name, table2.stat_date;
当前视图如下所示:

group_name | stat_date | col1_sum | col2_sum | col3_sum
-------------------------------------------------------
group1     | 6/19/13   |       50 |       10 |       14
group2     | 6/18/13   |      211 |       34 |       56
尽管缺乏6/19的数据,但150将比50更接近实际的群体总数。所以,我想要一个

group_name | stat_date | col1_sum | col2_sum | col3_sum
-------------------------------------------------------
group1     |   6/19/13  |     150 |       10 |       14
group2     |   6/18/13  |     211 |       34 |       56
我一直在寻找窗口函数中的first_值作为可能使用的函数。我发现Oracle的first_值支持ignore nulls选项,我相信它会满足我的需要。根据我链接的这一页,关于PL/SQL的第一个_值函数:

如果结果集中的第一个值为NULL,则函数将返回NULL,除非指定IGNORE NULLS。 如果使用IGNORE NULLS参数,则FIRST_VALUE将返回结果集中找到的第一个非null值。如果有的话 如果值为null,则它将返回null

示例语法:解析_子句上的FIRST_VALUEexpression[INGORE NULLS]


但PostgreSQL的第一个_值不支持这样的选项。在PostgreSql中有这样做的方法吗?提前谢谢你

这就是你想要描述的吗

从表2中选择sumcol1、sumcol2、sumcol3,其中col1不为空
虽然我省略了表1中的连接;这是给读者的练习

这就是你想要描述的吗

从表2中选择sumcol1、sumcol2、sumcol3,其中col1不为空
虽然我省略了表1中的连接;这是读者的练习

您可以使用自定义聚合作为第一个值表达式的postgres变体或null。或者使用所需的行为构建您自己的聚合。

您可以使用自定义聚合作为FIRST\u VALUEexpression INGORE NULLS的postgres变体。或者使用所需的行为构建您自己的聚合。

我刚刚包含了视图附带的sql脚本。谢谢。我不明白这个解释。你一直在写最近的专栏。是否及时添加列?最新列是什么意思?在本例中,我有stat_date,我想用它来确定最新的行。在本例中,每个人有多行,但其中一些行比其他行更近,具体取决于stat_date。我刚刚包含了视图附带的sql脚本。谢谢。我不明白这个解释。你一直在写最近的专栏。是否及时添加列?最新列是什么意思?在本例中,我有stat_date,我想用它来确定最新的行。在本例中,每个人有多行,但其中一些行比其他行更近,具体取决于统计数据这有点像我想要的-如果col1为null,那么我希望视图从col1不为null的最近一行获取col1值,并与其他col1值求和,这些值是“最近的非null”值。即使col1不可用,我仍然希望对col2和col3的最近非null值求和,而不管col1是否为null。这有点像我想要的-如果col1为null,然后我希望视图从col1不为null的最近一行中获取col1值,并与其他col1值求和,这些值是“最近的非null”值。即使col1不可用,我仍然希望为col2和col3求和最近的非null值,无论col1是否为null。我认为这是正确的答案,但是与MySQL版本相比,这个函数花费的时间太长,所以我就放弃了。将等待,直到有更多的windows功能添加到postgres!!!我只想补充一点,虽然这个解决方案有效,但它并没有窗口功能那么快!我认为这是正确的答案,但是与MySQL版本相比,这个函数花费的时间太长,所以我就放弃了。将等待,直到有更多的windows功能添加到postgres!!!我只想补充一点,虽然这个解决方案有效,但它并没有窗口功能那么快!