MS Acess:字段可能包含00:00:00

时间:2015-09-30 10:38:42

标签: datetime ms-access max

我正在尝试在MS Access中构建一个Query,它返回给定实体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的条目存在?

3 个答案:

答案 0 :(得分:0)

您对Group ByUS_Indicia_Morada_Singular等最后字段使用US_Indicia_Laboral。您还必须对这些内容使用First, Last, Min,Max

答案 1 :(得分:0)

您可能需要考虑使用其他查询作为中间步骤,首先为每个组ID标识MAX日期/时间组合,然后使用后续查询来提取整个记录,其中该组ID,日期和时间匹配,这将确保您不必在其余字段上使用FirstMin,并且您将始终获得正确的数据

答案 2 :(得分:0)

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

  SELECT INT(ID_Entidade)             AS ID_Entidade
       , MAX(Timestamp_Classificacao) AS [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
    FROM Historico_Classificacoes
GROUP BY INT(ID_Entidade)
       , 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
ORDER BY INT(ID_Entidade);

从您的评论中,这里是接近您需要的SQL。我添加了字段" AnotherField"对于你,因为你可能需要或不需要在这里添加字段。

这当前从表中选择了整个记录,但只有单个"最近的"列出了在AnotherField中找到的每个值的记录。

可能需要更多的那个字段,其中AnotherField出现在SQL中。可以将您使用的字段而不是AnotherField视为需要用于查找最大日期记录的字段。

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 
                  )