【问题标题】:vb6/vba ado LEFT JOIN ON a range of datesvb6/vba ado 在一系列日期上左连接
【发布时间】:2019-01-05 20:43:09
【问题描述】:

我有一个包含 3 列的主表 (T1):产品、数量、购买日期

例如:

MouseFX, 13, 24/12/2015

然后是一个包含 3 列的辅助表 (T2):Product、UnitPrice、FromDate。

根据 UnitPrice 的更新时间,同一产品在 T2 中可能有不止一行:-

MouseFX, 12$, 24/12/2013
MouseFX, 13$, 23/1/2014
MouseFX, 15$, 2/3/2018

对于特定产品 ('MouseFX'),我需要使用以下命令从 T2 检索 UnitPrice

PurchaseDate (24/12/2015) > FromDate(23/1/2014) 
AND PurchaseDate< FromDate(2/3/2018)

我认为应该使用 LEFT JOIN 来完成

SELECT T1.*, T2.UnitPrice from T1 LEFT JOIN T2 ON PurchaseDate ?????/?

我希望我可以发布一些代码,但不知道。在 Excel/VBA 中,我会使用带有第四个参数 # 0

的 Vlookup

【问题讨论】:

    标签: sql excel vba ms-access vb6


    【解决方案1】:

    您可以使用相关子查询:

    SELECT T1.*,
           (SELECT TOP (1) T2.UnitPrice 
            FROM t2
            WHERE t2.product = t1.product AND
                  t2.FromDate <= t1.PurchaseDate
            ORDER BY t1.FromDate DESC
           ) as T2.UnitPrice
    FROM T1;
    

    通常的做法是在第二个表中包含 ToDate,因此它是一个类型 2 维度,您可以在其中使用 JOIN 语法。

    【讨论】:

    • 我在第一个括号后出现语法错误(不知道为什么?),但似乎代码总是会从 T2 中选择最后一个 UnitPrice,而它可能是连续的在最小和最大 DromDate 之间
    • @user3387046 。 . .我修正了逻辑。我不知道可能是什么问题。如果删除 (1) 周围的括号,是否可以解决问题?
    猜你喜欢
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多