sql-server - SQL - 返回前几天的第一个非空值
问题描述
我目前正在使用具有以下字段的 SQL 中的汇率表:
| Country | ExchangeRateDt | ExchangeRateValue |
| DK | 202000601 | 0.2 |
| DK | 202000603 | 0.21 |
| HR | 202000601 | 0.10 |
| HR | 202000602 | 0.12 |
对于每种货币,由于银行假期或只是周末,我在一年中的任何一天都没有价值。
我需要将它与订单表连接起来,其中一些订单是在周末和特定日期下的,我无法使用汇率来计算税款。
我需要取前几天的第一个非缺失值(因此在示例中,如果我在丹麦有 2020-06-02 日的订单,我应该使用 0.2 的汇率进行兑换)
我考虑过使用日历表,但我无法完成工作。
有人能帮我吗?
提前致谢,
R
解决方案
要获取小于或等于当天的最新值:
SELECT
<whatever columns you need from order>
,exchange.ExchangeRateValue
FROM
<order table> order
LEFT JOIN
<exchange rate table> exchange
ON exchange.Country = order.Country
AND exchange.ExchangeRateDt =
(
SELECT
MAX(ExchangeRateDt)
FROM
<exchange rate table>
WHERE
Country = order.Country
AND ExchangeRateDt <= order.OrderDt
)
确保汇率表上的聚集索引是 (Country, ExchangeRateDt)。
我将此作为左连接,因此如果货币信息丢失,您仍将返回订单结果。如果没有可用的汇率,您必须参考业务规则以了解如何进行。
推荐阅读
- python - 如何找出特定数字是否在整数值的中间?
- android - Flutter 从资产文件夹中读取所有文件
- database - Neo4j 中的 Cypher 查询以查找具有大多数路径匹配模式的特定节点
- python - 神经网络返回类而不是概率
- node.js - 错误:0409A06E:rsa 例程数据对于密钥大小来说太大
- java - 更新哈希映射格式的哈希映射中的对象变量
> - types - 为什么在循环后迭代字符串不执行代码?
- xslt - 通过 XSLT 将 XML 转为文本
- java - 串行链接错误和错误路径 jre 1.7.0_15 32-bi
- html - 从 hta 按钮启动 plink-ssh 连接并将值传递给 ssh 命令