Сейчас не совсем корректно работает обработка ситуации, когда сошли все участники команды.
Нужно менять проверку сохранения результатов этапа, расчет общего результата и общую сортировку.
Сейчас система будет ожидать время финиша в любом случае, если не указано, что команда не вышла на этап.
Если это время не указано, то результат команды на этапе считается некорректным и ставится NULL
В результате, в общей таблице такая команда не получит места вообще, хотя могла пройти 2 этапа из трёх.
Решение:
Во-первых, при сохранении результатов этапа нужно проверять, что к текущему моменту есть хотя бы один несошедший участник. Если есть - всё, как сейчас, если нет - наоборот нужно проверять,что время финиша отсутствует.
Во-вторых, при пересчёте результата команды не учитывать этап, на котором сошёл последний участник
В-третьих, при построении списка, нужно в качестве этапа невыхода указать этап схода последнего участника.
При этом не будет разницы между командой, которая не вышла на этап и сошла на нём, если обе команды имели на финише предыдущего этапа одинаковый результат.