Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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
Sql 第一个值()中出现意外行为,忽略空值(Vertica)_Sql_Vertica - Fatal编程技术网

Sql 第一个值()中出现意外行为,忽略空值(Vertica)

Sql 第一个值()中出现意外行为,忽略空值(Vertica),sql,vertica,Sql,Vertica,我在Vertica的第一个带有IGNORE NULLS参数的_值分析函数中看到了意想不到的行为。当它不应该返回NULL时,它似乎返回NULL 问题出现在这个非常小的表中: drop table if exists temp; create table temp (time_ timestamp(6), name varchar(10)); insert into temp (time_) values ('2016-03-18 20:32:16.144'); insert into temp (

我在Vertica的第一个带有IGNORE NULLS参数的_值分析函数中看到了意想不到的行为。当它不应该返回NULL时,它似乎返回NULL

问题出现在这个非常小的表中:

drop table if exists temp;
create table temp (time_ timestamp(6), name varchar(10));
insert into temp (time_) values ('2016-03-18 20:32:16.144');
insert into temp (time_, name) values ('2016-03-18 20:52:09.062', 'abc');
以下是表格select*from temp的内容:

time_                   | name
------------------------+--------
2016-03-18 20:32:16.144 | <null>
2016-03-18 20:52:09.062 | abc
以下是此查询返回的结果:

time_                   | first_name
------------------------+------------
2016-03-18 20:32:16.144 | <null>
2016-03-18 20:52:09.062 | abc

上面的查询是否有一个非常基本的语法错误?这个问题出现在Vertica Community Edition 7.1.1上。

这就是我的想法

select time_
      ,first_value(name) over (order by case when name is null then 1 else 0 end,time_) FirstName
from temp A
order by time_
返回

time_               FirstName
20:32:16.1440000    abc
20:52:09.0620000    abc

该函数按预期工作。 over order by time_uu是over order by time_uuRange unbounded Previous的快捷方式,它是unbounded Previous和current row之间over order by time_uuRange的快捷方式,这意味着每一行只能看到它前面的行,包括它自己。 第一行只看到它自己,因此它的作用域中没有非NULL值

如果需要整个范围的第一个非空值,则必须指定整个范围:

first_value(name ignore nulls) over 
    (order by time_ range between unbounded preceding and unbounded following) first_name
不,这绝对不是一个bug

您可能一直在使用sumx over order by y这样的语法来运行总计,前面的RANGE UNBOUNDED默认窗口对您来说似乎非常自然。 由于没有为第一个_值函数定义显式窗口,因此一直使用相同的默认窗口

下面是另一个测试用例:

ts val
-- ----
1  NULL
2  X
3  NULL
4  Y
5  NULL
您希望从以下函数中得到什么

last_value (val) order (by ts)
您希望从以下函数中得到什么

last_value (val ignore nulls) order (by ts)

谢谢你的解决方案。在Vertica CE 7.1.1中,这种确切的语法不起作用,但您可以这样做:当名称为null时,按大小写选择时间、第一个值名称,然后按大小写选择1其他0结束、时间、第一个值名称和临时名称。但不应该忽略空值来做这件事吗?@Verbatros很高兴你能调整。震惊于它不支持IIF@verbatross搜索。。。但到目前为止,我在中只看到忽略空值AWS@JohnCappelletti,Oracle,Teradata,MySql,PostgreSQL,SQLite只是一些不支持非标准IIF的数据库,这些非标准IIF提供了标准CASE语句中已经包含的功能。如果发现有人支持它,那将更令人震惊。另请注意Oracle和Teradata支持NULLS@DuduMarkovitz后来我看到。。。我看了SQL并开始自动驾驶。非常有趣。对我来说,与其说是一个功能,不如说是一个bug,但我很高兴知道整个故事。非常感谢。谢谢你提供更多的例子!非常有用。
last_value (val) order (by ts)
last_value (val ignore nulls) order (by ts)