ms查询man min date month查询

时间:2012-07-23 21:08:10

标签: ms-access date max monthcalendar

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

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

  1. 获得一年中每月的最高和最低产量
  2. 显示实际生产当月的最高/最低日期
  3. 我完成了第一个简单的任务;进行查询,获取相关字段,摘要Max&最后,最后在一个月内明智地分发。 I.e Jan Max 5000,Min 2000 ... Feb Max 6000 Min 1000

    现在我想要的是显示当月的最大或最小生产日期。因此,如果4月份当月的最大值为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
    

    以上数据是查询产生的几个字段。

    我正在寻找的是

    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    
    

1 个答案:

答案 0 :(得分: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

以下是名为qryMonthStart的查询的SQL。此查询的目的是确定包含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,请注意查询将失败(“条件表达式中的数据类型不匹配”)。防止这种情况的最简单方法是清除Null,然后在activity_date列中禁止它们(在表设计视图中将Required属性设置为Yes)。如果您决定必须在activity_date中允许Null,那么您还有更多的工作要做。

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