访问SQL Max-Function

时间:2014-02-06 20:34:07

标签: sql vba ms-access

我对涉及这些表的MS Access查询有疑问:

  • tblMIDProcessMain = {Process_ID,Process_Title,...}
  • tblMIDProcessVersion = {ProcessVersion_ID,ProcessVersion_FK_Process,ProcessVersion_VersionNo,ProcessVersion_FK_Status,...}
  • tblMIDProcessVersionStatus = {ProcessVersionStatus_ID,ProcessVersionStatus_Value}

这些表存储了不同版本的流程描述。 “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"

2 个答案:

答案 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”等