1

背景

我有一张各种物品的价格变化 表(下面的示例 - 数据组成):tblPriceChangestblItems

[tblPriceChanges]:
Timestamp       Item    Price
9AM 01/01/2013  Orange  50p
9AM 01/01/2013  Apple   30p
2PM 01/01/2013  Pen     80p
2PM 02/01/2013  Orange  55p
2PM 02/01/2013  Pen     85p
9AM 03/01/2013  Apple   25p
9AM 05/01/2013  Pencil  10p
9AM 05/01/2013  Pen     70p
2PM 05/01/2013  Pencil  15p    <- Notice there can be multiple price changes on the same day
...

[tblItems]:
Item    Category    Ratio
Orange  Fruit       1
Apple   Fruit       3
Pen     Stationary  2
Pencil  Stationary  5
...

问题

最终结果是我希望能够看到每个类别的平均价格如何随时间变化- 例如:

在此处输入图像描述

具体来说,例如,水果的平均价格序列应计算为橙子和苹果价格在 aRatio中 1:3 的加权平均值。所以最后我希望(通过一些查询组合)为图表的基础数据生成下表:

Timestamp   Fruit   Stationary
01/01/2013  40.0    80.0
02/01/2013  55.0    85.0
03/01/2013  50.0    85.0
04/01/2013  50.0    85.0
05/01/2013  50.0    75.0
...
(this data is also made up and so probably not consistent with the original example)

我已经设法在两个表上进行了内部连接,但不太确定如何进行。我的主要问题是如何处理没有价格变化的日子,例如 01/04/13。平均价格仍然存在,但没有被我尝试的任何查询所接受。

那么如何使用查询来为图表构造数据呢?

4

1 回答 1

1

在我们开始解决方案之前要注意一点:注意不要在字段名中使用保留字。Timestamp是保留字。Access 将允许您以这种方式命名列,但您以后可能会遇到奇怪的问题,特别是如果您将来移动到另一个数据库或使用其他一些从 Access 数据库中获取数据的工具。

所以在这里,我将您的Timestamp专栏重命名为DateTimeStamp.

我认为您的要求在 VBA 中实现比在纯 SQL 查询中更直接:虽然您可以轻松构建一个查询来获取每天每个类别的平均值,但您将很难填写数据没有数据的日子。

简单但不完整的 SQL 解决方案

但是,也许在您的数据中存在这些漏洞并不是什么大问题,因为图表会简单地跳过那些缺失值(它们不会显示为 0.00 的数据值)。
在这种情况下,以下查询应为您提供结果:

SELECT Dateserial(Year([DateTimeStamp]), 
                  Month([DateTimeStamp]), 
                  Day([DateTimeStamp])) AS NormalisedDate,
       tblItems.Category,
       SUM([Price]*[Ratio])/SUM([Ratio]) AS AvgPrice
FROM   tblPriceChanges
       INNER JOIN tblItems
         ON tblPriceChanges.Item=tblItems.Item
GROUP  BY Dateserial(Year([DateTimeStamp]), 
                     Month([DateTimeStamp]), 
                     Day([DateTimeStamp])),
          tblItems.Category 

将导致以下结果:

NormalisedDate    Category     AvgPrice
01/01/2013        Fruit        35
01/01/2013        Stationary   80
02/01/2013        Fruit        55
02/01/2013        Stationary   85
03/01/2013        Fruit        25
05/01/2013        Stationary   22.0833333333333
于 2013-08-03T04:56:42.443 回答