Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 从类似字段中选择一个字段,然后从另一个字段中选择最大值_Ms Access - Fatal编程技术网

Ms access 从类似字段中选择一个字段,然后从另一个字段中选择最大值

Ms access 从类似字段中选择一个字段,然后从另一个字段中选择最大值,ms-access,Ms Access,我有一个包含三列的表:Item、Quantity和Date 项目列中的值可能重复,但数量和日期将是唯一的 例如: Item - Quantity - Date Hammer - 3 - 1/12/15 Hammer - 7 - 5/18/15 Hammer - 6 - 8/1/15 Wrench - 8 - 2/24/15 Wrench - 3 - 6/10/15 我正在尝试编写一个只返回以下结果的查询: Item - Quantity - Date Hammer - 6 - 8/1/15 W

我有一个包含三列的表:Item、Quantity和Date

项目列中的值可能重复,但数量和日期将是唯一的

例如:

Item - Quantity - Date
Hammer - 3 - 1/12/15
Hammer - 7 - 5/18/15
Hammer - 6 - 8/1/15
Wrench - 8 - 2/24/15
Wrench - 3 - 6/10/15
我正在尝试编写一个只返回以下结果的查询:

Item - Quantity - Date
Hammer - 6 - 8/1/15
Wrench - 3 - 6/10/15
这是我的代码:

SELECT DISTINCT stock.stc_st AS Store, stock.art_st AS UPC, articles.descr AS Description, stock.quan_st AS Quantity, articles.rp AS Cost
FROM stock LEFT JOIN articles ON stock.art_st = articles.article
WHERE stock.ym_st = 
(SELECT Max(stock.ym_st) 
 FROM stock t1
 WHERE stock.art_st=t1.art_st 
 GROUP BY t1.art_st)

GROUP BY stock.stc_st, stock.art_st, articles.descr, stock.quan_st, articles.rp, articles.act, articles.stat
HAVING (((stock.stc_st)=[Which Store?]) AND ((articles.act)="Y") AND ((articles.stat)="Y"));
但是,我的代码返回的是所有项目,而我只希望它返回具有最长日期的项目。如果有人能看看这个,告诉我我做错了什么,我会非常感激

========================

现在我尝试使用下面答案中的代码,它在tmaxdate.art_st的内部连接上给了我一个连接语法错误。我确信这是一个像括号一样愚蠢的错误。有谁更熟悉Access的SQL语法,能告诉我我做错了什么吗?谢谢

    SELECT DISTINCT stock.stc_st AS Store, stock.art_st AS UPC, articles.descr AS Description, stock.quan_st AS Quantity, articles.rp AS Cost
FROM stock AS t1

INNER JOIN
    (
        SELECT tmaxdate.art_st, Max(tmaxdate.ym_st) AS MaxOfDate
        FROM stock AS tmaxdate
        GROUP BY tmaxdate.art_sc
    ) AS sub
    ON (t1.ym_st = sub.MaxOfDate) AND (tmaxdate.art_st = sub.art_st)


LEFT JOIN articles ON stock.art_st = articles.article
GROUP BY stock.stc_st, stock.art_st, articles.descr, stock.quan_st, articles.rp, articles.act, articles.stat
HAVING (((stock.stc_st)=[Which Store?]) AND ((articles.act)="Y") AND ((articles.stat)="Y"));

这还没有经过测试,但它更符合您的需求。 它使用子查询查找stock表的每个主键的最长日期,我假设这是art\u st

SELECT stock.stc_st AS Store
     , stock.art_st AS UPC
     , articles.descr AS Description
     , stock.quan_st AS Quantity
     , articles.rp AS Cost
FROM ( stock 
       LEFT JOIN articles 
              ON stock.art_st = articles.article
     )
     INNER JOIN (SELECT t1.art_st,  Max(stock.ym_st)  AS t1MaxDate
                   FROM stock t1
                 GROUP BY t1.art_st
                ) AS TabMax
               ON ( TabMax.art_st = stock.art_st
                  AND TabMax.t1MaxDate = stock.ym_st )
GROUP BY stock.stc_st
    , stock.art_st
    , articles.descr
    , stock.quan_st
    , articles.rp
    , articles.act
    , articles.stat
HAVING (((stock.stc_st)=[Which Store?]) AND ((articles.act)="Y") AND ((articles.stat)="Y"));

这还没有经过测试,但它更符合您的需求。 它使用子查询查找stock表的每个主键的最长日期,我假设这是art\u st

SELECT stock.stc_st AS Store
     , stock.art_st AS UPC
     , articles.descr AS Description
     , stock.quan_st AS Quantity
     , articles.rp AS Cost
FROM ( stock 
       LEFT JOIN articles 
              ON stock.art_st = articles.article
     )
     INNER JOIN (SELECT t1.art_st,  Max(stock.ym_st)  AS t1MaxDate
                   FROM stock t1
                 GROUP BY t1.art_st
                ) AS TabMax
               ON ( TabMax.art_st = stock.art_st
                  AND TabMax.t1MaxDate = stock.ym_st )
GROUP BY stock.stc_st
    , stock.art_st
    , articles.descr
    , stock.quan_st
    , articles.rp
    , articles.act
    , articles.stat
HAVING (((stock.stc_st)=[Which Store?]) AND ((articles.act)="Y") AND ((articles.stat)="Y"));

我无法理解示例数据是如何分布在您的表中的。所以我将这些数据存储在一个名为YourTable的表中

首先创建分组查询,以显示每个项目的最新日期:

选择t1.Item,Maxt1.Date作为MaxOfDate 从您的表中选择t1 按t1分组。项目 然后,您可以将其用作子查询,并将其连接回主表,以便仅选择具有匹配项/日期对的行:

选择t2.项目,t2.数量,t2.日期 从…起 你的桌子是t2 内连接 选择t1.Item,Maxt1.Date作为MaxOfDate 从您的表中选择t1 按t1分组。项目 作为子 t2.日期=子最大日期,t2.项目=子项目; 使用Access 2010中的示例数据,该查询将返回您请求的输出


由于您实际上没有一个单独的YourTable,因此您需要针对实际的表调整这种方法,但这种策略也应该适用于实际的表。

我不知道示例数据是如何分布在您的表中的。所以我将这些数据存储在一个名为YourTable的表中

首先创建分组查询,以显示每个项目的最新日期:

选择t1.Item,Maxt1.Date作为MaxOfDate 从您的表中选择t1 按t1分组。项目 然后,您可以将其用作子查询,并将其连接回主表,以便仅选择具有匹配项/日期对的行:

选择t2.项目,t2.数量,t2.日期 从…起 你的桌子是t2 内连接 选择t1.Item,Maxt1.Date作为MaxOfDate 从您的表中选择t1 按t1分组。项目 作为子 t2.日期=子最大日期,t2.项目=子项目; 使用Access 2010中的示例数据,该查询将返回您请求的输出


由于您实际上没有一个单独的表,您需要根据实际的表调整该方法,但此策略也应该适用于实际的表。

感谢各位的回复!我知道我需要做一个子查询来按最大日期分组,但无论我做什么,都会不断地抛出语法错误。我尝试使用您的查询,Harvey和Access在FROM子句上给了我一个语法错误。我知道我可以做到这一点,这是一件愚蠢的事情,比如括号放错了位置,我就是搞不懂。抱歉,尝试用内部连接替换连接谢谢大家的回复!我知道我需要做一个子查询来按最大日期分组,但无论我做什么,都会不断地抛出语法错误。我尝试使用您的查询,Harvey和Access在FROM子句上给了我一个语法错误。我知道我可以做到这一点,但这很愚蠢,就像括号放错了位置,我就是搞不懂。抱歉,尝试用内部连接替换连接选择DISTINCT stock.stc_st作为Store,stock.art_st作为UPC,articles.descr作为Description,stock.quan_st作为Quantity,articles.rp作为t1内部联接的库存成本选择tmaxdate.art_st、Maxtmaxdate.ym_st作为t1上的tmaxdate.art_sc作为sub的tmaxdate组的库存中的MaxOfDate。ym_st=sub.MaxOfDate和tmaxdate。Item=sub.art_st;左键连接stock.art\u st=articles.article分组BY stock.stc\u st,stock.art\u st,articles.descr,stock.quan\u st,articles.rp,articles.act,articles.stat拥有stock.stc\u st=[哪个存储?]和articles.act=Y和articles.stat=Y;这给了我一个语法错误。我做错了什么?在编辑我的原始问题时,可以更清楚地看到代码;删除后会发生什么情况?语法错误查询表达式“t1.ym_st=sub.MaxOfDate和tmaxdate.art_st=sub.art_st左键连接stock.art_st=articles.articl上的文章”。选择DISTINCT stock.stc_st AS Store,stock.art_st AS
UPC,articles.descr作为描述,stock.quan\u st作为数量,articles.rp作为成本从库存中作为t1内部连接选择tmaxdate.art\u st,Maxtmaxdate.ym\u st作为最大日期从库存中作为tmaxdate组由tmaxdate.art\u sc作为t1上的sub.ym\u st=sub.maxDate和tmaxdate.Item=sub.art\u st;左键连接stock.art\u st=articles.article分组BY stock.stc\u st,stock.art\u st,articles.descr,stock.quan\u st,articles.rp,articles.act,articles.stat拥有stock.stc\u st=[哪个存储?]和articles.act=Y和articles.stat=Y;这给了我一个语法错误。我做错了什么?在编辑我的原始问题时,可以更清楚地看到代码;删除后会发生什么情况?语法错误查询表达式“t1.ym\u st=sub.MaxOfDate和tmaxdate.art\u st=sub.art\u st LEFT JOIN articles ON stock.art\u st=articles.articl”中缺少运算符。具有多个联接的访问查询需要FROM子句中的括号。。。与包含子查询的部分分开。请看一个例子。我很抱歉成为一个痛苦的人,我真的很感谢你的帮助。请看一下我在修改原始问题时输入的代码,并告诉我需要在哪里插入括号。我看了你的另一篇文章,看起来很枯燥,但我尝试了5到6种不同的参数组合,所有这些都让我回想起了一个语法错误。顺便说一句,非常感谢。从一个更简单的查询开始,它关注于连接问题:SELECT*FROM stock AS t1 INNER join SELECT tmaxdate.art,Maxtmaxdate.ym_st AS MaxOfDate FROM stock AS tmaxdate GROUP BY tmaxdate.art_sc AS sub ON t1.ym_st=sub.MaxOfDate AND tmaxdate.Item=sub.art_st LEFT JOIN articles ON stock.art_st=articles.article如果Access接受,则可以选择输出字段,和添加回GROUP BY和HAVING子句。具有多个join的Access查询需要FROM子句中的括号。。。与包含子查询的部分分开。请看一个例子。我很抱歉成为一个痛苦的人,我真的很感谢你的帮助。请看一下我在修改原始问题时输入的代码,并告诉我需要在哪里插入括号。我看了你的另一篇文章,看起来很枯燥,但我尝试了5到6种不同的参数组合,所有这些都让我回想起了一个语法错误。顺便说一句,非常感谢。从一个更简单的查询开始,它关注于连接问题:SELECT*FROM stock AS t1 INNER join SELECT tmaxdate.art,Maxtmaxdate.ym_st AS MaxOfDate FROM stock AS tmaxdate GROUP BY tmaxdate.art_sc AS sub ON t1.ym_st=sub.MaxOfDate AND tmaxdate.Item=sub.art_st LEFT JOIN articles ON stock.art_st=articles.article如果Access接受这一点,则可以选择输出字段,并添加回GROUP BY和HAVING子句。