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 测试库的随机顺序多项选择答案