我有一张表,其中包含用户需要完成的任务。在任务A完成之前,任务B无法启动,所以我的表看起来像这样:
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 - taskid 3条目,因为在他之前的每个任务(在同一个工作中)已经完成,现在是时候完成他的任务了。但是,我不想为Steve选择工作2 - taskid 6,因为Chris还没有完成工作2 - taskid 5。
有没有办法在一个查询中执行此操作?或者我是否需要获取Steve所有任务的列表,然后遍历每个任务并验证它是每个作业的最低任务ID,其中completeTime为0?
答案 0 :(得分: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 :(得分: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;