需要SQL查询方面的帮助吗
我需要一个我似乎不知道如何编写的查询的帮助。(SQL Server) 我有两个表,“Project”和“ProjectStatus”有这些字段:(我省略了不相关的列) 项目需要SQL查询方面的帮助吗,sql,sql-server,database,Sql,Sql Server,Database,我需要一个我似乎不知道如何编写的查询的帮助。(SQL Server) 我有两个表,“Project”和“ProjectStatus”有这些字段:(我省略了不相关的列) 项目 PROJID (PK) NAME 项目状态 STATUSID PROJID (FK, references projid in project table) CHANGEDDATE 我想获得statusid为3或5的所有项目的列表,因此我显然第一次尝试是执行以下操作: SELECT p.PROJID,
PROJID (PK) NAME
项目状态
STATUSID PROJID (FK, references projid in project table) CHANGEDDATE
我想获得statusid为3或5的所有项目的列表,因此我显然第一次尝试是执行以下操作:
SELECT p.PROJID, p.NAME
FROM Project AS p
INNER JOIN ProjectStatus AS s
ON s.PROJID=p.PROJID
WHERE s.STATUSID IN (3, 5)
(忽略此查询中任何潜在的语法错误,我只是从内存中写下它-在测试时它起作用)
现在,事实证明,每次有人更改项目的项目状态时,都会有一个新条目进入ProjectStatus表。它不只是像我最初想的那样更新STATUSID值
那意味着我必须
SELECT TOP 1 STATUSID
FROM ProjectStatus
WHERE PROJID=(any given project id)
ORDER BY CHANGEDDATE DESC
百万美元问题
如何将此查询合并到第一个查询中以获得所需的结果?
(或者任何其他可以得到我想要的东西的查询)试试这个
SELECT p.PROJID, p.NAME
FROM Project AS p
INNER JOIN ProjectStatus AS s
ON s.PROJID=p.PROJID
WHERE s.STATUSID >= 3 && s.STATUSID <= 5
选择p.PROJID,p.NAME
从项目作为p
内部联接项目状态为s
关于s.PROJID=p.PROJID
其中s.STATUSID>=3&&s.STATUSID看起来您需要在此处交叉应用。请注意,从2005版开始,它在SQL Server中可用
SELECT p.PROJID, p.NAME, S.STATUSID
FROM Project AS p
CROSS APPLY (
SELECT TOP 1 STATUSID
FROM ProjectStatus as S
WHERE S.PROJID=p.PROJID
ORDER BY CHANGEDDATE DESC
) as S
WHERE s.STATUSID IN (3, 5)
由于WHERE
子句的存在,交叉应用
更为合适。@GordonLinoff请注意,谢谢。最初错过了这个,更新了答案。太好了,这正是我需要的!谢谢:)