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订单电子邮件 - 显示订单已完成日期和变更密钥以及值(如果适用)