gpt4 book ai didi

MYSQL - 分组并选择最高结果并使用 JOIN?

转载 作者:行者123 更新时间:2023-11-30 21:35:27 24 4
gpt4 key购买 nike

我有 2 个 SQL 表,我需要从第二个表中提取最高的时间戳,并且该时间戳需要在一个范围内。

Table: Projects 
ID,Name,invoiceTotal,department
1,Project1,100,1
2,Project2,200,3
3,Project3,300,2
4,Project4,100,2
5,Project5,400,1


Table: Manning
ProjectID,timestamp
1,1547038287
1,1515558287
1,1501118287
5,1471118287
5,1481118287

我一直在尝试使用 PHP 首先运行一个具有内部连接的查询,这样我就可以提取两个表的数据。

SELECT
project.ID,
project.name,
project.invoiceTotal,
manning.timestamp
FROM
manning
INNER JOIN projects ON project.ID = manning.ProjectID
WHERE
project.department = 1 AND
manning.timestamp BETWEEN 1547038287 AND 1301118287
ORDER BY
manning.timestamp ASC

然后我使用 PHP 循环并运行过程代码来对数据进行排序,然后显示它。问题是它很慢,而且绝对不是最有效的方法。

因此,对于这个示例数据,我希望得到结果:

1,Project1,100,1547038287
5,Project5,400,1481118287

我一直在尝试使用“分组依据”,但是如果配员表的顺序不正确,我就得不到正确的结果。

感谢您的帮助。我试过使用 sqlfiddle.com,但它现在对我来说似乎不可用 :(

最佳答案

不要加入所有人员配置行,每个项目只加入最新的人员配置行:

select
p.ID,
p.name,
p.invoiceTotal,
m.max_timestamp
from projects p
join
(
select projectid, max(timestamp) as max_timestamp
from manning
where timestamp between 1301118287 and 1547038287
group by projectid
) m on m.projectid = p.id
where p.department = 1;

这不仅是一种编写此查询的简洁方法,而且还是一种非常高效的方法。为什么要加入所有记录,当您只对其中的一小部分感兴趣时?不要产生你必须再次摆脱的巨大中间结果。

关于MYSQL - 分组并选择最高结果并使用 JOIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54110974/

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