SAP HANA:创建一个具有最大启用日期的联接

SAP HANA:创建一个具有最大启用日期的联接,hana,Hana,我正忙于SAP HANA开发,但遇到了货币转换问题 在联接的左侧,我有一个带有销售订单号、客户请求的交货日期和订单值(以文档货币表示)(来自VBAK/VBAP)的投影。在联接的右侧,我有一个包含TCURR表(来自SAP)的投影,该表根据MAER(月平均汇率)进行过滤,并将“from currency”联接到销售订单中的文档货币。我需要将文档货币的值转换为欧元,但必须选择TCURR中可用的最新汇率。我如何加入?因此,实际上,我需要将销售订单日期加入到max(汇率日期)中,但必须小于或等于销售订单日

我正忙于SAP HANA开发,但遇到了货币转换问题


在联接的左侧,我有一个带有销售订单号、客户请求的交货日期和订单值(以文档货币表示)(来自VBAK/VBAP)的投影。在联接的右侧,我有一个包含TCURR表(来自SAP)的投影,该表根据MAER(月平均汇率)进行过滤,并将“from currency”联接到销售订单中的文档货币。我需要将文档货币的值转换为欧元,但必须选择TCURR中可用的最新汇率。我如何加入?因此,实际上,我需要将销售订单日期加入到max(汇率日期)中,但必须小于或等于销售订单日期

请检查以下HANA db SQLScript,好吗

我过去常常得到每种货币兑换成欧元的最新条目 然后将此CTE表(最后一个CTE3)连接到VBAK表

我实际上没有使用货币汇率进行金额转换,我认为您可以使用选择列表中的乘法或除法等进行处理

with cte as (
    select 
        to_date( to_nvarchar(99999999 - gdatu) ) gdate,
        * 
    from "SAPS4S".TCURR
    where tcurr = 'EUR'
), cte2 as (
    select 
        row_number() over (partition by fcurr, YEAR(gdate), MONTH(gdate) order by gdate desc) as rn,
         YEAR(gdate) as gdate_year, 
         MONTH(gdate) as gdate_month,
        * 
    from cte
), cte3 as (
    select * from cte2 where rn = 1
)
select 
    vbeln,
    erdat,
    netwr,
    waerk,
    cte3.* 
from "SAPS4S".VBAK as vbak
left join cte3
    on 
        vbak.waerk = cte3.fcurr and
        YEAR(vbak.erdat) = cte3.gdate_year and
        MONTH(vbak.erdat) = cte3.gdate_month;
你好,厄尼, 根据您的第二条评论,我对SQLScript查询做了如下更改

with cte as (
    select 
        to_date( to_nvarchar(99999999 - gdatu) ) gdate,
        * 
    from "SAPABAP1".TCURR
    where tcurr = 'EUR'
), cte2 as (
select 
    vbeln,
    erdat,
    netwr,
    waerk,
    sum(1) over (partition by vbeln order by gdate desc rows unbounded preceding) as rownum,
    cte.*
from "SAPABAP1".VBAK as vbak
left join cte
    on 
        vbak.waerk = cte.fcurr and
        vbak.erdat >= cte.gdate
)
select *
from cte2 
where ifnull(rownum,1) = 1 
如果它能在你的数据库上运行并得到你的反馈,我会很高兴的


TCURR表中有空记录,因为没有货币汇率条目,或者文档货币已定义为EUR(实际上,汇率应等于1)

Good day Eraper!非常感谢-它100%有效。哇!非常感谢。我现在将定制我的使用,但原则是健全的!下午好,艾拉帕。我在HANA和SQL中尝试了您的代码,虽然它可以工作,但并不能100%解决我的问题。真正的问题是返回等于或小于SO日期的货币汇率(尽可能接近SO日期但小于SO日期的汇率)。但是谢谢-你的代码给了我一些指导。嗨,厄尼,我添加了第二个查询,你能检查一下吗?你是个天才!这100%有效。谢谢你,艾拉帕。现在,我需要将我的思想集中在代码上,以尝试理解它。感谢您的良好反馈:)您能将该解决方案标记为有用吗?