MS Access选择每个GroupID的最新日期

时间:2016-05-12 09:40:49

标签: sql ms-access access-vba

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

[tblItem]
ItemID
ItemName
ItemDate
GroupID
StatusID

[tblGroup]
GroupName
StatusID

[tblStatus]
StatusID
StatusName

我正在尝试编写一个VBA SQL查询来为tblItem中的所有行选择最近的日期(即Max(ItemDate)),其中每个GroupID的tllGroup的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 个答案:

答案 0 :(得分:3)

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

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;

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