1

我有一张表格,里面有用户需要完成的任务。在任务 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。

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

4

2 回答 2

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
于 2012-09-06T19:06:33.617 回答
1

任务总是按顺序添加吗?目前除了 taskID 之外没有其他方法可以告诉 taskID 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;
于 2012-09-06T19:13:03.517 回答