Eu sugiro que você coloque as condições da cláusula where em sua instrução select e retorne uma "pontuação" para cada registro. Remova-o completamente da sua cláusula where e isso pode lhe dar uma ideia do motivo de você ter registros ausentes se eles forem retornados com uma pontuação 0.
Caso quando condição Então 5quando condição então 4Etc... senão 0Fim caso
Depois de ter seus resultados pontuados, você pode ordenar por sua pontuação decrescente e pegar o primeiro por pessoa. Ou adicione consultas externas adicionais para retornar apenas as linhas com a pontuação máxima por pessoa.
Peço desculpas por responder do meu telefone.