根据日期仅选择每条记录的最新版本 | MS Access [重复]

Posted

技术标签:

【中文标题】根据日期仅选择每条记录的最新版本 | MS Access [重复]【英文标题】:Select only the latest version of each record based on date | MS Access [duplicate] 【发布时间】:2019-09-13 02:30:27 【问题描述】:

目前我有一个包含 3 列的 Access 表:

PersonID、代码、日期

一个 PersonID 可以在不同的日子有不同的代码,我想只显示最近一天的最新代码。

全表:

我要查找的查询结果:

我尝试将 MAX 条件添加到数据列,但它似乎不起作用:

MAX([Date])

【问题讨论】:

该链接说明了如何显示前 3 条记录,我需要查询仅显示基于日期的最新代码 @Rene 你能告诉我如何显示我的数据,它有点不同 【参考方案1】:

有多种方法可以做到这一点。第一个很可能是最简单的。这与 Rene 在 cmets 中发布的链接中的想法完全相同。

您需要在 where 子句中使用子查询来使用 MAX 函数获取最近的日期。

SELECT *
FROM [Table]
WHERE Date = (SELECT MAX(T1.Date) FROM [Table] AS T1 WHERE T1.PersonID = Table.PersonID)

在更复杂的版本中,您也可以通过内部连接获得相同的结果:

SELECT
           TABLE.PersonID
         , TABLE.Code
         , MaxDate
FROM
           [Table]
           INNER JOIN
                      (
                               SELECT
                                        PersonID
                                      , Max(DATE) AS MaxDate
                               FROM
                                        [Table]
                               GROUP BY
                                        PersonID
                      )
                      AS T1
                      ON
                                 (
                                            TABLE.PersonID = T1.PersonID
                                            AND TABLE.Date = T1.MaxDate
                                 )

你会得到以下:

PersonID    Code    Date
115         38833   8/14/2019
117         38838   6/13/2018

【讨论】:

这两个查询似乎都出现了两次最大值,所以我得到了 2019 年 8 月 14 日两次和 2018 年 6 月 13 日两次。我正在使用您的确切查询,所以我不确定问题出在哪里 只有在数据表中重复了最大日期时才有可能。如果PersonIDDate 不形成主键,那么它将返回相同PersonID 的所有最大日期。仔细检查表中的数据。您发布的示例数据不会发生这种情况。

以上是关于根据日期仅选择每条记录的最新版本 | MS Access [重复]的主要内容,如果未能解决你的问题,请参考以下文章

根据表单字段中提供的日期查询 MS Access 中的最新记录

MS Access - 根据百分比随机选择记录

如何根据 MySQL 中的最大日期仅选择左表的一条记录?

SQL 加入 MS ACCESS 中的最新记录

仅汇总访问中最近日期的参数

内部联接仅从第二个表中选择基于日期的一行