MS Access Query 以检索订单日期列中最新日期的记录

Posted

技术标签:

【中文标题】MS Access Query 以检索订单日期列中最新日期的记录【英文标题】:MS Access Query to retrieve records with lasted date in orderdate column 【发布时间】:2016-12-17 11:59:29 【问题描述】:

我在 Access 数据库中有一个包含以下列的表

ProductID|ProductName|StoreID|StoreName|AuditRating|AuditVisit|NextAuditDue
100100   |Calculator |SC12345|CrawlyRoad| B        |11/12/2013|21/02/2014
100100   |Calculator |SC12345|CrawlyRoad| A        |11/12/2014|30/04/2015
100100   |Calculator |SC12345|CrawlyRoad| C        |16/12/2015|24/01/2017

我需要做一个查询,它只会给我提供 AuditVisit 日期最大的独特记录,就像在这种情况下我只想要第三行

100100   |Calculator |SC12345|CrawlyRoad| C        |16/12/2015|24/01/2017

我使用了group by,但由于我需要带上所有列,因此我得到了所有记录,因为 AuditRating 列在所有三行中都不同。

【问题讨论】:

【参考方案1】:

您可以使用TOP 1:

Select Top 1 * From YourTable Order By AuditVisit Desc

【讨论】:

感谢 Gustav,您的解决方案有效,我只需要检查它是否适用于整个表格,将其标记为答案 :) 非常棒,它在整个桌子上都有效,非常感谢您的帮助,也请评价这个问题:) 抱歉,我刚刚发现此解决方案已将所有日期列值更改为相同的最大日期,这是不正确的。 它不能“改变”任何东西——它是一个直接的选择查询——所以你可能在想别的东西。 对不起,我的意思是它已经为两个列选择了最大日期,并且只选择了日期与最大日期值匹配的记录,这就是所有记录具有相同日期的原因。我只想要产品级别的最大日期,而不是整个表格。【参考方案2】:

你不想有组,为什么要使用group by

SELECT 
*
FROM your_table
WHERE AuditVisit = (SELECT MAX(AuditVisit) FROM your_table)

我认为这很不言自明。

【讨论】:

感谢您的快速响应,但上面的代码不起作用,因为我的表有多个产品,这些产品有不同的商店和不同的最大 AuditVisit 日期,上面的查询将计算我所在的整个列中的最大数据只需要产品级别的不同记录的最大日期【参考方案3】:

如果您想在 MS Access 中记录一条记录,那么您需要非常小心 SELECT TOP。真的是SELECT TOP WITH TIES

因此,显而易见的答案是:

Select Top 1 *
From t
Order By AuditVisit Desc;

如果多行具有相同的日期,将返回多行。如果你真的想要一个,那么你想添加一个唯一的列作为顺序中的最后一个键:

Select Top 1 *
From t
Order By AuditVisit Desc, id;

我在您的数据中没有看到这样的键,尽管您可能有每行中唯一的列组合(可以将多个列添加到 ORDER BY)。

在 MS Access 中——甚至比在其他数据库中更重要——因此主键在表中很重要。

【讨论】:

以上是关于MS Access Query 以检索订单日期列中最新日期的记录的主要内容,如果未能解决你的问题,请参考以下文章

MS-Access 获取特定订单日期的产品价格

如何将日期从 C# 存储到 MS-Access 以及如何检索它?

如何检索 MS-Access 中的最后一个自动增量值,例如 Sql Server 中的 @@Identity

Ms Access Query:通过查询连接行

带有日期分隔符的 C# 和 MS Access SQL

我与 MS Access 数据库绑定的 datagridview 显示错误的时间格式