gpt4 book ai didi

sql - 需要有关 SQL 查询的帮助

转载 作者:搜寻专家 更新时间:2023-10-30 22:34:12 25 4
gpt4 key购买 nike

我需要有关查询的帮助,但我似乎无法弄清楚如何撰写。 (SQL服务器)

我有两个表,“Project”和“ProjectStatus”,它们具有以下字段:(我省略了不相关的列)

项目

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 值。

这意味着我必须

  1. 从 ProjectStatus 表中获取最新状态
  2. 执行与上面相同的查询,除了 STATUSID 必须是最新的,而不仅仅是连接到项目的任何随机 STATUSID

获取项目当前状态的SQL是:

SELECT TOP 1 STATUSID 
FROM ProjectStatus
WHERE PROJID=(any given project id)
ORDER BY CHANGEDDATE DESC

百万美元的问题

如何将此查询合并到第一个查询中以获得所需的结果?(或任何其他能让我得到我想要的东西的查询)

最佳答案

看来你需要在这里cross apply。请注意,从 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)

关于sql - 需要有关 SQL 查询的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39489488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com