Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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-窗口函数,用于从值不为null的前一行获取值_Sql_Window_Lag_Exasolution - Fatal编程技术网

SQL-窗口函数,用于从值不为null的前一行获取值

SQL-窗口函数,用于从值不为null的前一行获取值,sql,window,lag,exasolution,Sql,Window,Lag,Exasolution,我使用的是Exasol,在其他DBMS中,可以使用分析函数,如LAST_VALUE(),并使用OVER()函数为ORDER BY子句指定一些条件,如: select ... LAST_VALUE(customer) OVER (PARTITION BY ID ORDER BY date_x DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ) as the_last 不幸的是,我得到了以下错误: 错误:[0A000]不支持功能:窗口子

我使用的是Exasol,在其他DBMS中,可以使用分析函数,如
LAST_VALUE()
,并使用
OVER()
函数为
ORDER BY
子句指定一些条件,如:

select ...
LAST_VALUE(customer) 
OVER (PARTITION BY ID ORDER BY date_x DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ) as the_last
不幸的是,我得到了以下错误:

错误:[0A000]不支持功能:窗口子句(会话: 1606983630649130920)

如果我使用:
当前行而不是
和前面的1
,则不会发生同样的情况

基本上,我想要的是根据不是当前行的顺序获得最后一个值。在本例中,它将是前一行的$customer

我知道我可以使用(…)上的
滞后(customer,1)
,但问题是我希望前一个customer不为null,因此偏移量并不总是1

我该怎么做

非常感谢

这有用吗

select lag(customer) over (partition by id
                           order by (case when customer is not null then 1 else 0 end),
                                    date
                          )
您可以通过两个步骤完成此操作:

select t.*, 
       max(customer) over (partition by id, max_date) as max_customer
from (select t.*,
             max(case when customer is not null then date end) over (partition by id order by date) as max_date
      from t
     ) t;

不,没有。明天我将用一个原始数据的例子更新我的问题。无论如何,谢谢你。