我有一个数据库,保存 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/