有一张包含汇率的表格,但有些日子会有空值。对于空值的日子,我想选择较早的一天的汇率。有什么帮助吗?
答案 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;
我希望它有所帮助,