联合中每个 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()
。
我有一个数据库,包含工人和他们可以完成的三项不同任务。每个任务 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()
。