【发布时间】:2012-03-18 12:58:56
【问题描述】:
所以,这是一个非常简单的查询,但我不确定我是否做对了,因为我是在纸上制作的,并且没有可以试用的 DBMS。 这是大学考试的练习。 我有这张桌子:
Serv_req
=============
PK Svr_ID
State
Req_Date
Description
他们只是要求我显示状态为“打开”的最旧 Serv_Req 的数据。
到目前为止我写的是:
SELECT Svr_ID, State, Description, MIN(Req_Date)
FROM Serv_req
WHERE State LIKE 'Open'
GROUP BY Svr_ID, State, Description
现在,这将只返回包含最旧 Svr_req 信息的记录吗?还是会返回所有“开放”需求的列表,最后只包含最旧的日期?
更新
我忘了提。不幸的是,课程规则不允许我们使用SELECT TOP、LIMIT 1,甚至是子查询在FROM 语句中创建辅助表。
提前感谢你们的帮助!
更新 2 好的,所以,在看到我写的第一个查询完全错误之后,我再试一次。 如果您认为这是正确的,请告诉我:
SELECT Svr_id, State, Description
FROM Serv_req
WHERE State LIKE 'Open'
AND Req_Date = (SELECT MIN(S1.Req_date)
FROM Serv_req S1
WHERE S1.State LIKE 'Open'
)
我知道这不是执行此查询的最清晰/最有效的方法,但由于我的课程所施加的限制,这是我能想到的最好的方法。你们有什么感想?看起来对吗?
【问题讨论】:
-
您确定需要显示哪个服务器、它的状态和描述吗?
-
@gangreen 嗯,是的,这就是书上所说的:)。这可能有点令人困惑,但这实际上不是服务器,而是“服务要求”。所以它要求我显示最旧的服务需求状态是“打开”
-
我问的原因是因为提出的问题是不确定的。如果 2 个开放式服务要求恰好在同一个最短日期,会发生什么情况?