gpt4 book ai didi

mysql - 使用 max() 获取表中的最新行,加入另一个表

转载 作者:行者123 更新时间:2023-11-29 03:03:11 27 4
gpt4 key购买 nike

我有以下架构,遗憾的是我不允许更改:

+------------+ 
| vHistory v |
+------------+ +---------------+
| id | | instance i | +----------------------+
| component | +---------------+ | environment e |
| instance |* === 1| id | +----------------------+
| version | | environment |* ===== 1| idEnv |
| date | +---------------+ | environment |
+------------+ +----------------------+

(vHistory 列出组件在中间件​​上的安装日期;instance 列出中间件服务器的实例(例如“Tomcat 6.0.14 on machine”production-server- 78"); environment 表示生产/暂存/等)

我想为特定的 v.component 生成一个列表,其中包含以下列:

v.id, v.version, e.environment, v.date

在每个环境中显示所选组件的最新安装。我尝试了以下查询:

SELECT  MAX(v.id), 
e.environment,
v.version,
MAX(nv.date)
FROM vHistory v
INNER JOIN instance i
ON v.instance = i.id
INNER JOIN environment e
ON i.environment = e.idEnv
WHERE v.component = 100
GROUP BY e.environment

但是我觉得像那样使用两个 max() 函数不太舒服...

有没有更好的方法?我看过this加入日期的问题,但这也让我感到害怕,因为理论上可能有另一行具有相同的日期。

最佳答案

我认为这样的事情会起作用:

SELECT  v.id, 
e.environment,
v.date
FROM ( SELECT MAX(v2.id) AS id
FROM vHistory v2
INNER JOIN instance i2
ON v2.instance = i2.id
INNER JOIN environment e2
ON i2.environment = e2.idEnv
WHERE v2.component = 100
GROUP BY e2.environment
) AS maxid
JOIN vHistory v
JOIN instance i
JOIN environment e
ON ( maxid.id = v.id
AND v.instance = i.id
AND i.environemnt = e.idEnv
)

maxid 将只包含与您的查询匹配的行的最新 ID。将这些 ID 连接到整个表应该只返回您需要的信息。

关于mysql - 使用 max() 获取表中的最新行,加入另一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20053297/

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