我有一个数据库,有工人和他们可以完成的三个不同的任务。每个任务表都包含执行此任务的工作人员,执行任务的时间和持续时间。
所以表格如下:
工人表:
-------------------------
|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
答案 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}}。