【问题标题】:Select record in Access with most recent date在 Access 中选择最近日期的记录
【发布时间】:2017-10-05 09:01:27
【问题描述】:

我有一个 Access 表。

ID  Field1  Field2  Date
1   un_1    x       201701
2   un_2    y       201704
3   un_1    z       201702
4   un_3    a       201703
5   un_2    b       201709

我想获取此表的唯一(对于 Field1)记录,其中 Date 是最新的。

我试过了:

SELECT ID, Field1, Field2, Date
FROM MYTABLE
WHERE Date=SELECT(MAX(MYTABLE.Date) FROM MYTABLE WHERE ID=MYTABLE.ID)
GROUP BY Field1;

但它不起作用。

结果我希望:

un_1    z       201702
un_2    b       201709
un_3    a       201703

【问题讨论】:

  • 有了样本数据,预期的结果是什么?
  • 跳过 GROUP BY。用括号将子查询括起来。

标签: sql ms-access


【解决方案1】:

您的语法错误。您需要像这样在子查询周围加上括号,并且您需要为您的表添加同义词,因为您使用同一个表两次:

SELECT ID, Field1, Field2, Date
FROM MYTABLE i
WHERE MYTABLE.[Date]=(SELECT MAX(t.[Date]) FROM MYTABLE t WHERE t.ID=i.ID)
ORDER BY Field1;

【讨论】:

  • 谢谢。它返回Date=(SELECT MAX(t.Date) FROM MYTABLE t WHERE t.ID=MYTABLE.ID) 中的 Synthax 错误(附注:t 未定义,是吗?)
  • t 在这里定义为MYTABLE 的别名:FROM MYTABLE t。如果您希望 SQL 更明确,可以将其更改为 FROM MYTABLE As t,但这只是额外的文本。查看当前编辑,Date 是关键字,不应用于字段名称
  • 不幸的是它仍然不起作用。也许我在添加预期结果的问题上不够清楚。对此感到抱歉。
  • 它给出了语法错误。我的正确名称查询是:SELECT PARTNERID, NAME, FIRST_NAME, CF, DATA_R FROM MYTABLE WHERE MYTABLE.[DATA_R]= ( SELECT MAX(t.[DATA_R]) FROM MYTABLE as t WHERE t.PARTNERID=MYTABLE.PARTNERID ) ORDER BY PARTNERID ; Access 报告的错误在 SELECT MAX 部分。
  • 尝试在NAME周围添加[ ]方括号,并在外部查询中添加MyTable的同义词。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-20
相关资源
最近更新 更多