mySQL - 可以根据以前的记录值选择记录吗?

时间:2012-09-06 18:57:47

标签: mysql

我有一张表,其中包含用户需要完成的任务。在任务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?

2 个答案:

答案 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;