Fernandinha Postado Janeiro 24, 2012 Denunciar Share Postado Janeiro 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Janeiro 24, 2012 Denunciar Share Postado Janeiro 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... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 isaikki Postado Janeiro 25, 2012 Denunciar Share Postado Janeiro 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í Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Abel Bueno Postado Março 7, 2012 Denunciar Share Postado Março 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
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 para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.