2

我正在尝试为一家小公司开发基于访问的数据库。我做了几张表,其中一些是“2011/2012 年总产量”和“2011/2012 年总产量”。所有四个表都有一个“实际产量”列

现在,使用查询工具,我必须实现两个目标。

  1. 获取一年中每个月的最大和最小产量
  2. 显示当月实际产量最大/最小的日期

我完成了第一个简单的任务;进行查询,获取相关字段,汇总最大值和最小值,最后按月分发。即一月最大 5000,最小 2000...二月最大 6000 最小 1000

现在我想要的是显示该月的最大或最小生产日期。因此,如果 4 月的月份有 MAX 181,218.00,我希望它显示它发生的日期(即 2012 年 4 月 10 日)

我是 Access 的初学者,所以请尽可能简单。

从评论中收集的示例数据:

Month         Sum of Prod   Min Prod in $ Max Prod in $
------------- ------------- ------------- -------------
January 2011  $1,184,096.98    $20,486.40   $171,470.40
February 2011 $1,558,072.20    $44,962.20   $116,359.20
March 2011    $1,744,442.19    $19,200.00   $141,065.10
April 2011    $1,698,608.63    $27,500.70   $181,218.00
May 2011      $1,826,915.38    $37,996.00   $130,066.00
June 2011     $2,317,890.71    $42,645.00   $144,323.30

以上数据是Query生成的少数字段。

我正在寻找的是

Month         Date of Min Prod Min Prod in $ Date of Max Prod  Max Prod in $
------------- ------------- ------------- -------------     -------------
January 2011     Jan 15        $20,486.40     Jan 10         $171,470.40
February 2011    Feb 20        $44,962.20     Feb 27         $116,359.20
March 2011      March 10       $19,200.00     March 1        $141,065.10

等等。

是否可以使用查询来生成此结果?

谢谢!

与评论的关系。

其中一张表中的相关字段是。

Date of Activity Actual Production  
-------------   ------------- -------
1/3/2012              $20,486.40    
1/4/2012              $44,962.20    
1/5/2012              $19,200.00    
4

1 回答 1

0

我迷失了你问题的细节。因此,我将向您展示示例数据和查询,以从这些数据中获得我希望您想要的东西。

以下是 的内容tblAbbas

activity_date actual_production
1/3/2012             $20,486.40
1/4/2012             $44,962.20
1/5/2012             $19,200.00
2/1/2012                  $3.00
2/2/2012                  $2.00
2/3/2012                  $1.00

这是名为 的查询的 SQL qryMonthStart。此查询的目的是确定包含activity_date.

SELECT
    DateSerial(Year(activity_date),Month(activity_date),1)
        AS month_start,
    activity_date,
    actual_production
FROM tblAbbas;

下面的查询qryMonthStart用作它的数据源,并给了我这个结果集。

month_year    SumOf_production min_prod_date MinOf_production max_prod_date MaxOf_production
January 2012        $84,648.60      1/5/2012       $19,200.00      1/4/2012       $44,962.20
February 2012            $6.00      2/3/2012            $1.00      2/1/2012            $3.00

而查询 SQL ...

SELECT
    Format(grpby.month_start,"mmmm yyyy") AS month_year,
    grpby.SumOf_production,
    qmin.activity_date AS min_prod_date,
    grpby.MinOf_production,
    qmax.activity_date AS max_prod_date,
    grpby.MaxOf_production
FROM
    (
    (
        SELECT
            month_start,
            Sum(actual_production) AS SumOf_production,
            Min(actual_production) AS MinOf_production,
            Max(actual_production) AS MaxOf_production
        FROM qryMonthStart
        GROUP BY month_start
    ) AS grpby
    INNER JOIN qryMonthStart AS qmin
    ON
            (grpby.MinOf_production = qmin.actual_production)
        AND (grpby.month_start = qmin.month_start)
    )
    INNER JOIN qryMonthStart AS qmax
    ON
            (grpby.MaxOf_production = qmax.actual_production)
        AND (grpby.month_start = qmax.month_start)
ORDER BY grpby.month_start;

请注意,如果您对activity_date. 防止这种情况发生的最简单方法是清除 Null,然后在activity_date列中禁止它们(在表设计视图中将 Required 属性设置为 Yes)。如果您决定必须允许 Nulls in activity_date,那么您还有更多工作要做。

另请注意,month_year如果该actual_production月的多个每日记录中的值与每月最小值 ( MinOf_production) 匹配,则查询将为您提供相同的多行。同样的情况也适用于每月最高限额 ( MaxOf_production)。

于 2012-07-24T16:23:44.707 回答