我有三个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
非常感谢任何帮助!
乔治
答案 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;
这些版本并不完全相同。如果项目的组之间存在日期关联,则第一个可能不起作用。这解决了这个问题。