Хммм ... у вас проблемы, потому что ваш дизайн неправильный. Проблема в том, что на дизайн вашей базы данных повлияло то, как вы представляете представление таблицы. Но в базе данных мышление другое. База данных обычно проектируется следующим образом:
StudentID | ExcerciseID | Completed
1 | 1 | 1
1 | 2 | 1
1 | 3 | 0
2 | 1 | 0
....
И тогда вы можете сделать:
select StudentID, min(ExcerciseID) as FirstExcerciseNotCompleted
from Excercises
where Completed = 0
, чтобы увидеть первый неполный урок для каждого учащегося или, если вы хотите установить следующий выполненный урок на ученика 1, просто выполните:
update Excercises
set Completed = 1
where Student = 1 and ExcerciseID = (select min(ExcerciseID) from Excercises where StudentID = 1 and Completed = 0)