gpt4 book ai didi

mysql - Tricky Triple Sql Join 寻找最近的日期

转载 作者:搜寻专家 更新时间:2023-10-30 20:47:39 27 4
gpt4 key购买 nike

如果之前有人以类似的方式问过这个问题,我深表歉意。我是 SQL 的新手,很难找到解决问题的方法。很困惑。

我目前有三个表:


模板 - |编号 |姓名 |


用户 - |编号 |全名 |


变更日志 - |编号 |用户名 | id_模板 |最后编辑时间


我有一张装满模板的表格。

我有一个单独的表格,其中包含对这些模板进行更改的用户。每次进行更改时,都会在更改日志表中创建一个条目。

我正在尝试创建一个查询,其主要目标是从模板中获取每条记录,以及它最近更改的时间和更改者。

我提出了这个查询,它允许我找到特定模板 ID 的最新更改。

SELECT changelogs.id_user, changelogs.updated_at, users.full_name
FROM changelogs
JOIN users
ON changelogs.id_user = users.id
WHERE changelogs.id_template = :templateId
ORDER BY changelogs.updated_at DESC
LIMIT 1

我最初试图通过循环遍历每个模板记录并为每个记录 ID 运行上述查询来解决这个问题,但这很慢而且不起作用。我知道在 SQL 中一定有办法做到这一点,我想看看是否有人解决了类似的问题。我没有设计这个数据库,如果没有优化,请见谅。

我理想的最终结果是一个看起来像这样的表格:


|模板.id |模板名称 |用户名 | changelog.updated_at |

非常感谢您的指导

最佳答案

您可以使用两个 JOIN 从所有表中获取信息,然后使用 SUBQUERY获取 updated_at 字段的最大值,如下所示:

SELECT 
t.id as template_id, t.name as template_name,
u.name as user_name,
c.updated_at as changelog_updated_at
FROM
changelogs c

INNER JOIN templates t on c.id_template = t.id
INNER JOIN users u on c.id_user = u.id

WHERE
c.updated_at =
(SELECT MAX(updated_at) FROM changelogs c2 where c2.id_template = t.id)

ORDER BY t.template_name

关于mysql - Tricky Triple Sql Join 寻找最近的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54047771/

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