这个问题在历史上不是第一次提出,我仍然没有发现任何有用的东西。让我们假设用户(A、B、C)可以有更多的任务(清洁、维护、编程),并且任务可以有状态(开始、暂停、暂停、完成)。
SELECT username,tasks.id,subject,dateat,state FROM users
LEFT JOIN tasks ON tasks.owner_id = users.id
LEFT JOIN tasks_histories ON tasks_histories.task_id = tasks.id
ORDER BY username ASC, subject asc, dateat desc;
select * from tasks_histories;
所以有多个任务状态,我只需要第一个,根据“dateat” - 也许我想要第一个或最后一个记录。我尝试使用GROUP BY username,subject form
,但随后它不会观看 dateat 订购。
编辑:
假设A没有任务,B有两个任务:task1有一个状态,task2有3个状态。
所以这会返回它:
user taskid subject dateat state
A null null null null
B 9 task1 2011 5
B 10 task2 null null
B 8 task3 2011 1
B 8 task3 2012 5
B 8 task3 2013 3
但我想要它:
A null null null null
B 9 task1 2011 5
B 10 task2 null null
B 8 task3 2011 1
或者
A null null null null
B 9 task1 2011 5
B 10 task2 null null
B 8 task3 2013 3