将空值替换为前一行的值

时间:2018-01-09 10:44:33

标签: null sap hana

有一张包含汇率的表格,但有些日子会有空值。对于空值的日子,我想选择较早的一天的汇率。有什么帮助吗?

Exchange rate Table

1 个答案:

答案 0 :(得分:0)

我使用SQL row_number() function和partition by子句如下

$this->db->delete('tbl_books', array('id' => $id));

您可以将此代码放在UDF(用户定义的函数)中,并通过传递读取汇率(如日期,来源和目标货币等)所需的参数来使用它。

顺便说一句,更简单的方法是按日期返回排序结果集中的前1个比率,如下所示

declare i_date date = '20170105';
declare i_kurst varchar(1) = 'M';
declare i_fcurr varchar(5) = 'LKR';
declare i_tcurr varchar(5) = 'USD';

select top 1
    rate, row_number() over (partition by kurst, fcurr, tcurr order by maindate desc) as rn
from ExchangeRates
where maindate <= :i_date
and kurst = :i_kurst
and fcurr = :i_fcurr
and tcurr = :i_tcurr;

这是您可以将此SQLScript封装到HANA数据库上的UDF用户定义SQL函数中的方法。以下是其他HANA数据库SQL function代码示例,用于参考参数和语法

select top 1 rate
from ExchangeRates
where maindate <= :i_date
and kurst = :i_kurst
and fcurr = :i_fcurr
and tcurr = :i_tcurr
order by maindate desc;

您可以按如下方式使用此功能

create function read_exchange_rate (
    i_date date,
    i_kurst varchar(4),
    i_fcurr varchar(5),
    i_tcurr varchar(5)
) returns rate decimal(9,5)
as
begin

select top 1 rate into "RATE"
from ExchangeRates
where maindate <= :i_date
and kurst = :i_kurst
and fcurr = :i_fcurr
and tcurr = :i_tcurr
order by maindate desc;

end;

我认为这里需要注意;我想你已经知道汇率存储在SAP的TCURR表中。日期存储为反转日期格式。因此,如果您需要convert inverted date到正常日期格式,您可以参考给定的教程

插入缺失日期记录比选择值更复杂一些。为了确定缺少的日期,我在HANA数据库上使用了numbers table function,我很容易将其转换为日期表。

从Numbers_Table(365)中选择*

以上SQL将返回一个表格,其中包含从1到365的数字,可用于计算一年的天数

在HANA数据库上创建数字功能后,请检查以下代码 它针对给定参数识别从1月1日开始的12天内的缺失日期 然后为那些缺失日期插入新的汇率记录,其中汇率是最接近的先前非零汇率值

select read_exchange_rate('20170106','M','LKR','USD') from dummy;

我希望它有所帮助,