gpt4 book ai didi

mysql - 如何基于在 SQL 中使用复杂语句的 WHERE JOIN 两个表

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

我有 2 个表:1 个包含任务,1 个包含 task_actions。

我想要包含有关 task_actions 列的一些信息的任务表。当我使用像这样的 LEFT JOIN 时效果很好:

SELECT 
*, wp_task_mgr.id AS task_id,
wp_task_actions.id AS action_id,
wp_task_actions.completion_percentage AS lastcompperc
FROM
wp_task_mgr
LEFT JOIN wp_task_actions
ON wp_task_mgr.id = wp_task_actions.id_task

但是,问题是:我通过此查询获得了针对我的任务的最早的操作,而不是最新的操作。

我长期以来一直在寻求将最新记录分组到某个列上,并且我能够获得最新记录。

我能够获取按 task_id 分组的最新操作。因此搜索 1 个 task_id 并获取表中最近的操作:

SELECT * 
FROM wp_task_actions
INNER JOIN
(SELECT id_task, MAX(created_taskaction) AS MaxDateTime
FROM wp_task_actions
GROUP BY id_task) mostrecent ON wp_task_actions.id_task = mostrecent.id_task
AND wp_task_actions.created_taskaction = mostrecent.MaxDateTime");

现在我需要合并这两个查询。我需要完整的任务表,其中包含操作中的一列,显示该 task_id 的最新操作。 (即task_actions.completion_percentage)

我想要的表格如下所示:

task_mgr.id | task_mgr.name | task_actions.completion_percentage

(这是此task_mgr.id或task_actions.task_id的最后一条记录)

关于如何获得这个有什么想法吗?

干杯!

最佳答案

为了解决这个问题,MS SQL 2005+ 使用 OUTER APPLY,但我不确定 MySQL 是否可以使用它:

SELECT 
wp_task_mgr.*,
wp_task_mgr.id AS task_id,
A.id AS action_id,
A.lastcompperc
FROM
wp_task_mgr
OUTER APPLY (
SELECT DISTINCT id, id_task,
(SELECT MAX(created_taskaction) AS lastcompperc
FROM wp_task_actions WHERE id_task = wp.id_task)
FROM wp_task_actions wp
WHERE wp_task_mgr.id = wp_task_actions.id_task
) AS A

但是,您可以使用 LEFT JOIN:

SELECT 
wp_task_mgr.*,
wp_task_mgr.id AS task_id,
A.id AS action_id,
A.lastcompperc
FROM
wp_task_mgr
LEFT JOIN (
SELECT DISTINCT id, id_task,
(SELECT MAX(created_taskaction) AS lastcompperc
FROM wp_task_actions WHERE id_task = wp.id_task)
FROM wp_task_actions wp
) AS A
ON wp_task_mgr.id = A.id_task

关于mysql - 如何基于在 SQL 中使用复杂语句的 WHERE JOIN 两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33559266/

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