0

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

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)

AND 1 PRECEDING如果代替我使用,则不会发生同样的情况: CURRENT ROW

基本上我想要的是根据不是当前行的 Order by获取最后一个值。在此示例中,它将是前一行的 $customer。

我知道我可以使用,LAG(customer,1) OVER ( ...)但问题是我想要以前的客户不为空,所以偏移量并不总是 1...

我怎样才能做到这一点?

非常感谢!

4

1 回答 1

0

这行得通吗?

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;
于 2018-07-25T23:01:53.313 回答