在没有GROUP BY的子查询中使用MAX()

时间:2014-04-28 23:58:54

标签: mysql

我正在为一个班级做实践工作,我有以下架构可供使用:

Project (Projectid, Milestoneid, dateBegin, dateEnd)
Milestone (Milestoneid, MilestoneName, MilestoneDesc)

我需要输出Projectid,每个项目的最新里程碑Milestonename和Milestonedesc(每个项目的最新里程碑是给定项目的最高里程碑)

我得到了以下线索:"你想找到Milestoneid的最大值。你不能使用GROUP BY。" 我知道我必须使用MAX聚合,但我不能使用' GROUP BY'这是我丢失的地方。 显然我必须在子查询中使用MAX,如下所示:

SELECT Project.Projectid, Milestone.Milestonename, Milestone.Milestonedesc 
FROM Project p, Milestone m 
WHERE m.Milestoneid = (
SELECT MAX(m.Milestoneid) 
FROM Milestone m 
WHERE
)

我不知道如何查询表格以获得每个没有分组的Projectid的MAX ID。

如果有人有任何指示,那将极大地帮助我理解我不熟悉的SQL部分。

由于

2 个答案:

答案 0 :(得分:0)

我怀疑MAX关键字是红色鲱鱼。无论如何,这是一个解决方案(不完整)...

SELECT x.* 
  FROM project x
  LEFT 
  JOIN project y
    ON y.project_id = x.project_id

    -- any other JOINs go here

   AND y.milestoneid < x.milestoneid
 WHERE y.projectid IS NULL

    -- any other conditions go here;

答案 1 :(得分:0)

对您的查询进行小调整可提供另一种解决方案。该请求表示不使用group by,但您可以在没有group by的情况下拥有相关的子查询:

SELECT p.Projectid, m.Milestonename, m.Milestonedesc 
FROM Project p JOIN
     Milestone m 
     p.Milestoneid = m.Milestoneid
WHERE m.Milestoneid = (SELECT MAX(p2.Milestoneid) 
                       FROM Project p2
                       WHERE p2.ProjectId = p.ProjectId
                      )
相关问题