mysql - 联合表中每个 ID 的最新日期

标签 mysql union union-all

我有一个数据库,保存 worker 和他们可以完成的三个不同任务。每个任务表保存哪个工作人员执行了该任务、何时执行以及花费了多长时间。

所以表格如下所示:

工作表:

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

任务表:

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

每个任务表如上所示,称为任务1、任务2、任务3。不可能将这些放在同一个表中,因为每个任务都有特定于其自身的其他列,这些列不是该联合所需的,而是在其他地方使用的。

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

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

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

我尝试使用以下问题中选择的答案,但用三个任务表的并集替换 wp_posts 表,但没有成功: 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;

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

关于mysql - 联合表中每个 ID 的最新日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28794282/

相关文章:

sql - 使用一个查询更新多行

sql - SSIS Union All 不返回所有记录

mysql - 在 phpMyAdmin 中触发触发器时显示消息

sql-server - SQL : Using Top 1 in UNION query with Order By

mysql - 想知道为什么我必须在 mysql 中分配给 session 变量?

mysql - 如何创建两个具有空值的表的并集?

sql - Union All 但只保留 T-SQL 中一个表中的重复项

sql - 与联合所有SQL查询获取错误 'Column specified multiple times'

mysql - 使用 SQL 从同一个表中的两行中选择

php - 按 'X' 按钮后数据库更改