2012-09-06 119 views
1

我有一张填满用户需要完成的任务的表格。任务B无法启动,直到任务A完毕,所以我的表看起来是这样的:mySQL - 可以根据以前的记录值选择记录吗?

taskID | jobID | assignedTo | taskName | completedTime 
---------------------------------------------------------------------- 
1    1   Carl   blah 1   11235512 
2    1   Mike   blah 2   13578423 
3    1   Steve   blah 3   0 
4    2   Alex   blah 4   12481235 
5    2   Chris   blah 5   0 
6    2   Steve   blah 6   0 

考虑看看史蒂夫,我希望选择工作1 - 3 taskid的条目,因为每一项工作(在同一份工作中)在他完成之前,现在是他完成这项工作任务的时候了。但是,我不想为史蒂夫选择工作2 - taskid 6,因为克里斯还没有完成工作2 - taskid 5.

有没有办法在一个查询中做到这一点?或者我必须得到Steve所有任务的列表,然后循环遍历每个任务,并验证它是每个完成时间为0的作业的最低任务ID?

+0

在用户定义的函数中总是有一种方法可以做到这一点。但是我假设你需要一个本地查询,它选择由jobId分组的所有任务,其中taskID高于该作业的最高任务ID,其中completionTime不为零。 –

+0

[subquery](http://dev.mysql.com/doc/refman/5.0/en/subqueries.html)或传统的'JOIN'是做这件事的正常方法。 –

回答

3
SELECT 
nowtable.* -- or whatever fields you want 
FROM yourtable AS nowtable 
LEFT JOIN yourtable AS beforetable 
    ON nowtable.jobID=beforetable.jobID 
    AND beforetable.taskID<nowtable.taskID 
WHERE nowtable.assignedTo="Steve" 
GROUP BY nowtable.taskID 
HAVING IFNULL(COUNT(beforetable.taskID),0)=0 
1

是否总是按顺序添加任务?目前除了taskID之外没有别的办法可以告诉taskIDs 1和2应该在3之前完成。

select top 1 * 
from tblTasks 
where completedTime = 0 
and jobID = (select top 1 jobid from tblTasks where assignedTo = @username and completedTime = 0 order by jobID) 
and assignedTo = @username 
order by taskID; 
+0

是的,创建作业时,所有任务都按顺序填充到数据库中。 – Brds

+0

难道这只会给我1个结果(即“top 1”)......理论上,用户不可能有无限数量的任务,他们下一步行动。 – Brds