如果以前也有人以类似的方式问过这个问题,我深表歉意。我对sql比较陌生,很难找到解决问题的方法。非常困惑。
我现在有三张table:
模板-| id |名称|
用户-| id |全名|
更改日志-| id | id |用户| id |模板|上次编辑时间|
我有一张满是模板的table。
我有一个单独的表,其中充满了对这些模板进行更改的用户。每次进行更改时,都会在changelog表中创建一个条目。
我正在尝试创建一个查询,主要目标是从模板中获取每条记录,以及最近更改的时间和更改者。
我提出了这个查询,它允许我查找特定模板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中一定有办法做到这一点,我想看看是否有人解决了类似的问题。我没有设计这个数据库,所以很抱歉,如果它没有优化。
我理想的最终结果是一张表,看起来像:
|template.id | template.name | user.name | changelog.updated |位于|
非常感谢您的指导
3条答案
按热度按时间bqjvbblv1#
您可以使用两个联接从所有表中获取信息,然后使用子查询获取更新的\u at字段的最大值,如下所示:
tcbh2hod2#
可以使用相关子查询:
对于外部查询中引用的每个模板,子查询将查找最长更新日期。然后用它来过滤外部查询中的记录。
lvmkulzt3#
我认为窗口函数是你的朋友。我没有旋转示例表来运行此操作,因此可能会有一个或两个类型: