首页 > 解决方案 > 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

标签: sql-serverfunction

解决方案


要获取小于或等于当天的最新值:

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)。

我将此作为左连接,因此如果货币信息丢失,您仍将返回订单结果。如果没有可用的汇率,您必须参考业务规则以了解如何进行。


推荐阅读