【发布时间】:2022-01-16 22:46:44
【问题描述】:
我有一个无法解决的 SQL 问题,或者似乎找不到任何可以解决问题的解决方案。我在 Azure Synapse 上使用 SQL 无服务器池。
我的问题是,在有更新之前,我无法弄清楚如何回填每个日期的费率。例如人民币兑美元在每月 1 日和 30 日更新。我需要每天填写与 1 日相同的汇率,直到 30 日汇率发生变化等等...
我的桌子: 1 - 汇率
| FromCurrencyCode | ToCurrencyCode | Exchange Rate | ExchangeDate |
|---|---|---|---|
| CHF | USD | 0.98068059233108 | 2019-04-30 22:30:01.0 |
| CHF | USD | 0.98068059233108 | 2019-04-30 22:30:02.0 |
2 - 日历表
| Calendar_Date | Calendar_Day | Calendar_Month | Calendar_Year |
|---|---|---|---|
| 2019-01-03 | 3 | January | 2019 |
| 2019-01-04 | 4 | January | 2019 |
这是一个问题,因为我根据创建日期将具有外币的 ID 列表加入到汇率表中。所以我可以在每月 15 日创建一个项目,在 2 次更新之间,并为其使用最新的更新率(即 1sts 率)。
我尝试使用左连接作为起点,如下所示:
SELECT distinct t1.[FromCurrencyCode],
t1.[ToCurrencyCode],
t1.[ExchangeRate],
t2.[Calendar_Date]
FROM [dbo].[ExchangeRate] t1 join [dbo].[Calendar] t2 on convert(date,t1.ExchangeDate) =
t2.Calendar_Date
order by t1.FromCurrencyCode, t2.Calendar_Date
这会导致: [1]:https://i.stack.imgur.com/cNSqz.png
我查看了很多涉及递归公用表表达式 (CTE) 的旧解决方案,但到目前为止似乎没有一个对我有用。示例中的货币并不相同,因为它是表格中的示例数据,因此您可以理解布局!
任何帮助将不胜感激!
【问题讨论】:
标签: sql-server left-join common-table-expression azure-synapse currency-exchange-rates