Ms access 从类似字段中选择一个字段,然后从另一个字段中选择最大值
我有一个包含三列的表:Item、Quantity和Date 项目列中的值可能重复,但数量和日期将是唯一的 例如: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
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子句。