Fernandinha Posted January 24, 2012 Report Share Posted January 24, 2012 Olá pessoal.Estou com uma dúvida... tenho uma tabela que contem matricula do aluno e status de frequencia (ausencia ou presença), tenho que procurar quais alunos tem 7 ou mais faltas consecutivas.Alguém pode me dar um help.Obrigada. Quote Link to comment Share on other sites More sharing options...
0 fulvio Posted January 24, 2012 Report Share Posted January 24, 2012 Boa tarde Fernandinha, Para procurar quem teve mais de 7 faltas: agrupamento por aluno, count na frequência=ausencia, no final da sintaxe group by, colocar o having count(frequencia)>=7. Até ai tudo bem... mas o problema será identificar a sequência destas faltas. Se elas tiverem que ser consecutivas, terá q identificar um campo que tenha esta cronologia. Se por exemplo for a data da aula ou data da inserção, terá q fazer uma verificação na data para identificar se entre uma e outra ausência, não tenha nenhuma presença. Aí encontrará a consecutividade... Quote Link to comment Share on other sites More sharing options...
0 isaikki Posted January 25, 2012 Report Share Posted January 25, 2012 Apenas dando um exemplo do que o fulvio disse:select a.nome from aluno a join frequencia f on f.idAluno = a.idAluno where f.data between '2011/09/01' and '2011/09/30' having count(f.falta) >= 7qualquer coisa diz aí Quote Link to comment Share on other sites More sharing options...
0 Abel Bueno Posted March 7, 2012 Report Share Posted March 7, 2012 Acho que após esse tempo você já se virou de algum jeito, mas vou dar uma sugestão aqui como referência.Podemos levar em consideração as datas em que houve mudança de estado (presença para falta, falta para presença), para contar as consecutivas.Considerando a seguinte tabela:create table presenca ( aluno varchar(50), data_aula date, presente char(1) check (presente in ('S','N')) ); Simplista, para facilitar o exemplo. Considerando o seguinte conjunto de dados: insert into presenca select 'abel', GETDATE() + 0, 'S' union select 'abel', GETDATE() + 1, 'S' union select 'abel', GETDATE() + 2, 'S' union select 'abel', GETDATE() + 3, 'S' union select 'bruno', GETDATE() + 0, 'S' union select 'bruno', GETDATE() + 1, 'N' union select 'bruno', GETDATE() + 2, 'S' union select 'bruno', GETDATE() + 3, 'N' union select 'carlos', GETDATE() + 0, 'S' union select 'carlos', GETDATE() + 1, 'S' union select 'carlos', GETDATE() + 2, 'N' union select 'carlos', GETDATE() + 3, 'N' union select 'daniel', GETDATE() + 0, 'N' union select 'daniel', GETDATE() + 1, 'S' union select 'daniel', GETDATE() + 2, 'N' union select 'daniel', GETDATE() + 3, 'N' union select 'eduardo', GETDATE() + 0, 'S' union select 'eduardo', GETDATE() + 1, 'N' union select 'eduardo', GETDATE() + 2, 'N' union select 'eduardo', GETDATE() + 3, 'N' union select 'fernando', GETDATE() + 0, 'N' union select 'fernando', GETDATE() + 1, 'N' union select 'fernando', GETDATE() + 2, 'N' union select 'fernando', GETDATE() + 3, 'S' Vou contar aqui 3 faltas consecutivas apenas (mais fácil para inserir os dados de exemplo). Pela nossa regra apenas eduardo e fernando tiveram 3 ausencias consecutivas. Temos daniel que faltou 3 vezes, mas teve uma presença no meio. A sacada, como dito antes, é identificar para cada linha, quando houve mudança de estado: select aluno, presente, data_aula, isnull(( select min(data_aula) from presenca p1 where p1.aluno = p.aluno and p1.presente != p.presente and p1.data_aula > p.data_aula ), '9999-12-31') data_mudanca from presenca p Em data_mudanca teremos a data que ele passou a frequentar se estava faltando e passou a faltar se estava frequentando. Com esses dados, fazemos um agrupamento , aplicando as regras: select p2.aluno, p2.presente, p2.data_mudanca, COUNT(*) qtd from ( select aluno, presente, data_aula, isnull(( select min(data_aula) from presenca p1 where p1.aluno = p.aluno and p1.presente != p.presente and p1.data_aula > p.data_aula ), '9999-12-31') data_mudanca from presenca p ) as p2 where presente = 'N' -- estou interessado nas faltas group by p2.aluno, p2.presente, p2.data_mudanca having count(*) >= 3 -- 3 ou mais consecutivas Quote Link to comment Share on other sites More sharing options...
Question
Fernandinha
Olá pessoal.
Estou com uma dúvida... tenho uma tabela que contem matricula do aluno e status de frequencia (ausencia ou presença), tenho que procurar quais alunos tem 7 ou mais faltas consecutivas.
Alguém pode me dar um help.
Obrigada.
Link to comment
Share on other sites
3 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.