Datetime MS Acess:查询时字段可能包含00:00:00时的最大值(日期/时间字段)

Datetime MS Acess:查询时字段可能包含00:00:00时的最大值(日期/时间字段),datetime,ms-access,max,Datetime,Ms Access,Max,我试图在MS Access中构建一个查询,返回给定实体ID的最后日期/时间。研究表明,在相应字段上使用MAX()函数,在其余字段上使用GROUP BY似乎是可行的方法 但是,在存在0小时、0分钟和0秒的值时,这似乎不起作用,因为它也显示了这些值。查询的SQL如下所示: SELECT Int(Historico_Classificacoes.ID_Entidade) AS ID_Entidade, Max(Historico_Classificacoes.Timestamp_Classificac

我试图在MS Access中构建一个查询,返回给定实体ID的最后日期/时间。研究表明,在相应字段上使用MAX()函数,在其余字段上使用GROUP BY似乎是可行的方法

但是,在存在0小时、0分钟和0秒的值时,这似乎不起作用,因为它也显示了这些值。查询的SQL如下所示:

SELECT Int(Historico_Classificacoes.ID_Entidade) AS ID_Entidade, Max(Historico_Classificacoes.Timestamp_Classificacao) AS [Data da última classificação], Historico_Classificacoes.US_Indicia_Pais_Constituicao, Historico_Classificacoes.US_Indicia_Responsabilidades_Fiscais, Historico_Classificacoes.US_Indicia_Morada_Coletiva, Historico_Classificacoes.US_Indicia_Telefone, Historico_Classificacoes.US_Indicia_Proveniencia_Capital, Historico_Classificacoes.US_Indicia_Beneficiários, Historico_Classificacoes.US_Indicia_Naturalidade, Historico_Classificacoes.US_Indicia_Nacionalidade, Historico_Classificacoes.US_Indicia_Morada_Singular, Historico_Classificacoes.US_Indicia_Laboral
FROM Historico_Classificacoes
GROUP BY Int(Historico_Classificacoes.ID_Entidade), Historico_Classificacoes.US_Indicia_Pais_Constituicao, Historico_Classificacoes.US_Indicia_Responsabilidades_Fiscais, Historico_Classificacoes.US_Indicia_Morada_Coletiva, Historico_Classificacoes.US_Indicia_Telefone, Historico_Classificacoes.US_Indicia_Proveniencia_Capital, Historico_Classificacoes.US_Indicia_Beneficiários, Historico_Classificacoes.US_Indicia_Naturalidade, Historico_Classificacoes.US_Indicia_Nacionalidade, Historico_Classificacoes.US_Indicia_Morada_Singular, Historico_Classificacoes.US_Indicia_Laboral
ORDER BY Int(Historico_Classificacoes.ID_Entidade);
Historico_Classificacoes表当前包含以下数据:

"ID_Entidade";"Timestamp_Classificacao";"Classificacao_DMIF";"Notacao_Risco_BCFT";"US_Indicia_Pais_Constituicao";"US_Indicia_Responsabilidades_Fiscais";"US_Indicia_Morada_Coletiva";"US_Indicia_Telefone";"US_Indicia_Proveniencia_Capital";"US_Indicia_Beneficiários";"US_Indicia_Naturalidade";"US_Indicia_Nacionalidade";"US_Indicia_Morada_Singular";"US_Indicia_Laboral"
"62";20/9/2015 00:00:00;1;30;1;1;1;1;1;1;1;1;1;0
"62";28/9/2015 10:43:38;1;30;1;1;1;1;1;1;1;1;1;1
"62";29/9/2015 17:52:24;1;30;1;1;1;1;1;1;1;1;1;1
"62";29/9/2015 17:52:40;1;30;1;1;1;1;1;1;1;1;1;1
"98";20/9/2015 00:00:00;2;15;1;1;1;1;1;1;0;0;0;0
"98";20/9/2015 00:00:01;0;0;0;0;0;0;0;0;0;0;0;0
在数据表视图中执行查询时,会输出以下内容:

"ID_Entidade";"Data da última classificação";"US_Indicia_Pais_Constituicao";"US_Indicia_Responsabilidades_Fiscais";"US_Indicia_Morada_Coletiva";"US_Indicia_Telefone";"US_Indicia_Proveniencia_Capital";"US_Indicia_Beneficiários";"US_Indicia_Naturalidade";"US_Indicia_Nacionalidade";"US_Indicia_Morada_Singular";"US_Indicia_Laboral"
62;29/9/2015 17:52:40;1;1;1;1;1;1;1;1;1;1
62;20/9/2015 00:00:00;1;1;1;1;1;1;1;1;1;0
98;20/9/2015 00:00:00;1;1;1;1;1;1;0;0;0;0
98;20/9/2015 00:00:01;0;0;0;0;0;0;0;0;0;0

实体62和98存在重复记录,而预期每个实体只有一个记录。我是不是遗漏了什么?为什么存在值保持为00:00:00的条目?

您使用
分组依据
作为最后一个字段,如
US\u Indicia\u Morada\u Singular
US\u Indicia\u Laboral
。你必须使用<代码>第一、最后、min、或<代码>马克斯<代码>。

你可能想考虑使用一个额外的查询作为中间步骤,首先识别每个组ID的最大日期/时间组合,然后一个后续查询,将整个组ID、日期和时间匹配到整个记录中,这将确保您不必在其余字段上首先使用
Min
,并且您将始终获得正确的数据

以下是您的尝试(没有重复的别名)

根据您的评论,这里是接近您需要的SQL。我已经为您添加了字段“AnotherField”,因为您可能需要也可能不需要在此处添加字段

这将当前从表中选择整个记录,但仅列出在另一个字段中找到的每个值的单个“最近”记录

可能您需要多个字段,而SQL中会出现另一个字段。将您使用的字段(而不是其他字段)视为查找最长日期记录所需的字段

SELECT Main.*
  FROM Historico_Classificacoes AS Main
       INNER JOIN (  SELECT AnotherField
                         , MAX(Timestamp_Classificacao) AS [MaxDate]
                      FROM Historico_Classificacoes
                  GROUP BY AnotherField
                  )
                  AS MostRecent
               ON ( Main.AnotherField            = MostRecent.AnotherField
                    AND 
                    Main.Timestamp_Classificacao = MostRecent.MaxDate 
                  )     

如果,比如说,我对其他每个字段使用最小值而不是最大值,会有多大的区别?在ID_Entidade上使用groupby,在Timestamp_Classificacao上使用Max,在其他每个字段上使用Max,似乎可以产生我想要的结果。。。但是,考虑到我正在尝试选择具有最新日期的记录,这真的是正确的方法吗?不,那么您将需要一个子查询来从当前查询中检索最新日期的ID的详细信息。您觉得上面的方法有用吗?如果是,请标记为答案。
SELECT Main.*
  FROM Historico_Classificacoes AS Main
       INNER JOIN (  SELECT AnotherField
                         , MAX(Timestamp_Classificacao) AS [MaxDate]
                      FROM Historico_Classificacoes
                  GROUP BY AnotherField
                  )
                  AS MostRecent
               ON ( Main.AnotherField            = MostRecent.AnotherField
                    AND 
                    Main.Timestamp_Classificacao = MostRecent.MaxDate 
                  )