联合表中每个id的最新日期

时间:2015-03-01 13:51:12

标签: mysql union union-all

我有一个数据库,有工人和他们可以完成的三个不同的任务。每个任务表都包含执行此任务的工作人员,执行任务的时间和持续时间。

所以表格如下:

工人表:

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

任务表:

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

每个任务表如上所示,称为task1,task2,task3。不可能在同一个表中包含这些,因为每个任务都有其他特定于自身的列,这些列不是此联合所必需的,但在其他地方使用。

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

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

如何使用上述联合编写一个select语句,以返回每个worker id和name,以及最近任务的日期和时间长度。

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

1 个答案:

答案 0 :(得分:0)

我将推荐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(),则可能需要使用{{1}}。