加入SQL搜索最接近的相同或更小的日期

问题描述 投票:0回答:1

我有两个表T_VEN和T_COM。 在第一个中,我有几种产品的销售日期,在第二个中,我有这些产品每天的成本。 我想加入表格以告知产品在销售当天的成本,但是当当天没有成本时,我希望它找到前一天的成本。

例如:(日期采用 DD/MM/YYYY 格式)

T_VEN

产品 日期
1 2024年1月2日
1 2024年2月2日
2 2024年2月2日
1 2024年3月2日

T_COM

产品 日期 成本
1 2024年1月2日 2.50
1 2024年2月2日 3.50
2 2024年1月2日 4.50
产品 日期 成本
1 2024年1月2日 2.50
1 2024年2月2日 3.50
2 2024年2月2日 4.50
1 2024年3月2日 3.50

我尝试过以各种方式进行连接、子查询、使用 group by 提取最大值、使用 casewhen 子句连接等,但我遇到了困难。我可以轻松地在 Excel 中使用 XLOOKUP 函数连接 Match_mode = -1(完全匹配或下一个更小的值。如果未找到完全匹配,则返回下一个更小的值)。

sql join
1个回答
0
投票

您可以使用以下方法 连接产品和日期的表,然后使用子查询处理缺失的成本

SELECT
    T_VEN.PROD,
    T_VEN.DATE,
    COALESCE(T_COM.COST, (
        SELECT TOP 1 T_COM_SUB.COST
        FROM T_COM AS T_COM_SUB
        WHERE T_COM_SUB.PROD = T_VEN.PROD
          AND T_COM_SUB.DATE < T_VEN.DATE
        ORDER BY T_COM_SUB.DATE DESC
    )) AS COST
FROM
    T_VEN
LEFT JOIN
    T_COM
ON
    T_VEN.PROD = T_COM.PROD
    AND T_VEN.DATE = T_COM.DATE;

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.