我对涉及这些表的MS Access查询有疑问:
这些表存储了不同版本的流程描述。 “ProcessVersion_VersionNo”字段包含提供版本号的整数。现在我想为每个进程获取最高版本号,从而获得当前版本。如果我执行以下操作,它会起作用:
SELECT tblMIDProcessMain.Process_Titel
, Max(tblMIDProcessVersion.ProcessVersion_VersionNo) AS CurrentVersion
FROM tblMIDProcessMain
INNER JOIN tblMIDProcessVersion
ON tblMIDProcessMain.Process_ID = tblMIDProcessVersion.ProcessVersion_FK_Process
GROUP BY tblMIDProcessMain.Process_Titel;
查询返回包含每个现有process_title的记录集以及版本字段的相应最大数量。但是只要在Select语句中添加“ProcessVersion_FK_Status”等其他字段,查询就会停止工作。
任何帮助将不胜感激。提前谢谢。
乔恩
修改
为了澄清一点,我添加了一个简化的例子
的家长表 的
Process_ID | Process_Title
----------------------------------
1 | "MyProcess"
2 | "YourProcess"
儿童-表 的
Version_ID | Version_FK_ProcessID | Version_No | Version_Status
---------------------------------------------------------------------------
1 | 1 | 1 | "New"
2 | 2 | 1 | "Discarded"
3 | 2 | 2 | "Reviewed"
4 | 2 | 3 | "Released"
预期结果:
Title | Max_Version_No | Status
--------------------------------------------------------
MyProcess | 1 | "New"
YourProcess | 3 | "Released"
答案 0 :(得分:4)
鉴于您更新帖子的示例表,这应该有效:
select process_title as Title
, max_version.max_version_no
, c.version_status as status
from (parenttable p
inner join (select max(version_id) as max_version_no, version_fk_process_id from childtable group by version_fk_process_id) max_version
on p.process_id = max_version.version_fk_process_id)
inner join childtable c
on max_version.max_version_no = c.version_id and max_version.version_fk_process_id = c.version_fk_process_id
答案 1 :(得分:2)
我假设您要将新字段添加到'Group By'子句中?如果没有,那么您必须包含在'Group By'中,或者您必须使用其中一个运算符,如“Max”或“First”等