联合中每个 ID 的最新日期 table

Latest date for each id, in a union table

我有一个数据库,包含工人和他们可以完成的三项不同任务。每个任务 table 包含哪个工人执行此任务、何时以及花费了多长时间。

所以 table 看起来如下:

工人table:

-------------------------
|worker_id | worker_name|
|----------|------------|
|          |            |

任务 tables:

------------------------------------
|task_id | worker_id | date | time |
|--------|-----------|------|------|
|        |           |      |      |

每个任务 table 看起来如上,称为 task1、task2、task3。不可能将它们放在同一个 table 中,因为每个任务都有其他特定于自身的列,这些列不是该联合所必需的,但在其他地方使用。

要使用的三个任务table的并集如下:

SELECT `date`, time FROM task1
UNION ALL SELECT `date`, time FROM task2
UNION ALL SELECT `date`, time FROM task3

如何使用上述联合编写 select 语句 return 每个工人的 ID 和姓名,以及他们最近任务的日期和时间长度。

我尝试使用从以下问题中选择的答案,但将 wp_posts table 替换为三个任务 table 的并集,但没有成功: MySQL order by before group by

我要推荐 substring_index()/group_concat() 技巧:

SELECT userid, max(date) as date,
       substring_index(group_concat(time order by date desc), ',', 1) as time
FROM (SELECT userid, `date`, time FROM task1 UNION ALL
      SELECT userid, `date`, time FROM task2 UNION ALL
      SELECT userid, `date`, time FROM task3
     ) u
GROUP BY userid;

这会将 time 转换为字符串。如果您想要特定格式,您可能需要使用 date_format()