MS-Access 获取特定订单日期的产品价格

Posted

技术标签:

【中文标题】MS-Access 获取特定订单日期的产品价格【英文标题】:MS-Access Get price of product at certain order date 【发布时间】:2010-01-13 15:49:41 【问题描述】:

我有一张表格,里面填满了采购价格,如下所示:

sku 价格 btw startdate PCR-CA5425023181515 21,17 € 1 01/01/2009 PCR-CA5425023181515 999,00 € 1 06/06/2009 PCR-CA5425023181515 444,00 € 4 09/07/2009 PCR-CA5425023181515 100,00 € 4 10/08/2009

我有另一张桌子,里面有订单,像这样:

sku 数量 orderdate PCR-CA5425023181515 5 01/05/2009 PCR-CA5425023181515 10 01/12/2009 PCR-CA5425023181515 10 24/12/2009

我的目标是从该日期获得每个订单的每个购买价格。 (例如:当我在 5 月 1 日(01/05)订购产品时,它的价格为 21,17 欧元。 当我在 12 月 1 日(01/12)订购时,它的价格为 100,00 欧元。)

过去一个小时我一直在努力解决这个问题,但还没有发现任何有用的东西。

【问题讨论】:

【参考方案1】:
SELECT
     O.sku,
     O.qty,
     PP.price
FROM
     Orders O
INNER JOIN Purchase_Prices PP ON
     PP.sku = O.sku AND
     PP.start_date <= O.order_date
WHERE
     NOT EXISTS
     (
          SELECT
               *
          FROM
                Purchase_Prices PP2
          WHERE
                PP2.sku = PP.sku AND
                PP2.start_date <= O.order_date AND
                PP2.start_date > PP.start_date
     )

或者:

SELECT
     O.sku,
     O.qty,
     PP.price
FROM
     Orders O
INNER JOIN Purchase_Prices PP ON
     PP.sku = O.sku AND
     PP.start_date <= O.order_date
LEFT OUTER JOIN Purchase_Prices PP2 ON
     PP2.sku = O.sku AND
     PP2.start_date <= O.order_date AND
     PP2.start_date > PP.start_date
WHERE
     PP2.sku IS NULL

【讨论】:

就是这样!第一个,带有子查询,就像一个魅力。我也在尝试使用 WHERE EXISTS,但有多个子查询。它没有成功。然而,第二个没有奏效。 Access 抱怨缺少运营商。 (这显然不是真的) 要小心,因为带有 NOT 的子查询在 Jet/ACE 中没有得到很好的优化,并且并不总是使用条件两侧的索引。在这方面,NOT EXISTS 甚至比 NOT IN 更糟糕,NOT IN 大部分时间都使用这两个索引。它不起作用的情况并非完全可预测,并且由于它可能与元数据有关,因此今天不是性能猪的 NOT 子查询可能是在涉及更多记录后的某些其他情况下,例如。

以上是关于MS-Access 获取特定订单日期的产品价格的主要内容,如果未能解决你的问题,请参考以下文章

sql 由特定作者导出产品的woocommerce订单电子邮件 - 显示订单已完成日期和变更密钥以及值(如果适用)

ms-access:仅显示特定日期内记录的报告

sql这个语句怎么写条件,小于2010-4-1的订单日期

WooCommerce Rest Api:按特定日期获取订单

获取所有产品,并将特定订单的产品放在首位

获取每个产品最新的两条线并获取价格和日期