MS Access 为每个 GroupID 选择最近的日期

Posted

技术标签:

【中文标题】MS Access 为每个 GroupID 选择最近的日期【英文标题】:MS Access select the most recent date for each GroupID 【发布时间】:2016-05-12 09:40:48 【问题描述】:

我有三个 MS Access 表,tblGroup、tblItem、tblStatus:

[tblItem]
ItemID
ItemName
ItemDate
GroupID
StatusID

[tblGroup]
GroupName
StatusID

[tblStatus]
StatusID
StatusName

我正在尝试编写一个 VBA SQL 查询来选择 tblItem 中具有最新日期(即 Max(ItemDate))的所有行,其中每个 GroupID 的 tblGroup 的 StatusID 等于“1”。

我一直在尝试以下变体(见下文),但我不明白如何根据另一个表过滤结果,即另一个表中 tblGroup 的 StatusID 等于“1”。

DoCmd.OpenForm "frmItem"
Forms!frmItem.frmItemSubform.Form.RecordSource = "SELECT tblItem.ItemID, Max(tblItem.ItemDate) FROM tblItem GROUP BY tblItem.ItemID, tblItem.ItemDate"
Forms!frmItem.frmItemSubform.Requery

任何帮助将不胜感激!

乔治

【问题讨论】:

【参考方案1】:

如果我理解正确,那么这几乎是您要求的直接翻译:

select i.*
from tblItem as i 
where i.date = (select max(i2.date)
                from tblItems as i2 inner join
                     tblGroup as g
                     on i2.GroupId = g.GroupId
                where i2.GroupId = i.GroupId and g.StatusId = 1
               );

或者,或者:

select i.*
from tblItem as i inner join
     (select i.GroupId, max(i2.date) as date
      from tblItems as i2 inner join
           tblGroup as g
           on i2.GroupId = g.GroupId
      where g.StatusId = 1
      group by GroupId
     ) gmax
     on gmax.GroupId = i.GroupId and gmax.date = i2.date;

这些版本并不完全相同。如果项目的跨组日期存在关联,则第一个可能不起作用。这解决了这个问题。

【讨论】:

以上是关于MS Access 为每个 GroupID 选择最近的日期的主要内容,如果未能解决你的问题,请参考以下文章

选择每组前 N 个项目 ms-Access - MORE "Ns"

需要帮助返回 ms-access 测试库的随机顺序多项选择答案

在 ms Access 中从每个组中选择至少 3 行时出错 - 仅选择了至少 2 行

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

使用联合从 MS Access 表中选择随机记录 [重复]

将下拉菜单链接到 MS Access 中的新表单