我正在为一个班级做实践工作,我有以下架构可供使用:
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部分。
由于
答案 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
)