Pessoal, estou com dificuldade de realizar o seguinte select:
Selecionar a primeira e a ultima data para cada codigo existente de um funcionario na tabela ponto que é mensal obedecendo a ordem cronologica dos dias. Abaixo um exemplo de registro do funcionario 0911251 na tabela ponto:
2009-04-05 0911251 00020 NULL
2009-04-06 0911251 00020 NULL
2009-04-07 0911251 00020 NULL
2009-04-08 0911251 00020 NULL
2009-04-09 0911251 00000 NULL
2009-04-10 0911251 00020 NULL
2009-04-11 0911251 00172 NULL
2009-04-12 0911251 00000 NULL
2009-04-13 0911251 00000 NULL
2009-04-14 0911251 00000 NULL
2009-04-15 0911251 00000 NULL
2009-04-25 0911251 00000 NULL
2009-04-16 0911251 00000 NULL
2009-04-17 0911251 00000 NULL
2009-04-23 0911251 00020 NULL
Para esse funcionario (0911251) deverei ter de resultado o seguinte:
cod 00020 dtinicial 05-04-2009 dtfinal 08-04-2009
cod 00172 dtinicial 11-04-2009 dtfinal 11-04-2009
cod 00000 dtinicial 12-04-2009 dtfinal 17-04-2009
cod 00020 dtinicial 23-04-2009 dtfinal 23-04-2009
cod 00000 dtinicial 25-04-2009 dtfinal 25-04-2009
Alguém poderia me ajudar nessa demanda?

Ajuda Em Seleção
Started By carlosins, 26/04/2009, 15:47
2 replies to this topic
#1
Posted 26/04/2009, 15:47
#2
Posted 27/04/2009, 12:55
Tenta isso:
select cod, min(data) as dtFinal, max(data) as dtFinal from tblFuncionarios where idFuncionario = '0911251' group by cod
Especialidade: Desenvolvimento e Banco de Dados.
Este post lhe ajudou? Agradeça:
#3
Posted 27/04/2009, 19:46
Renan, obrigado pela sugetão, testei não está retornando da forma pretendida, veja como ficou:
$rpont = "SELECT entra, min(dia) as dtini, max(dia) as dtfin, date_format(dia, '%d/%m/%Y') as dia, sai, jornd, jornp, jorndif, oco, just FROM ponto WHERE num = '$mat' group by oco order by dia";
Nesse caso ele agrupa por codigo e me retorna como dia inicial a data correta mas a data final ele está pegando a última sem observar a ordem cronológica.
traz assim:
cod 00020 dtinicial 05-04-2009 dtfinal 23-04-2009
cod 00172 dtinicial 11-04-2009 dtfinal 11-04-2009
cod 00000 dtinicial 12-04-2009 dtfinal 25-04-2009
quando deveria ser assim:
cod 00020 dtinicial 05-04-2009 dtfinal 08-04-2009
cod 00172 dtinicial 11-04-2009 dtfinal 11-04-2009
cod 00000 dtinicial 12-04-2009 dtfinal 17-04-2009
cod 00020 dtinicial 23-04-2009 dtfinal 23-04-2009
cod 00000 dtinicial 25-04-2009 dtfinal 25-04-2009
Veja que o codigo 00020 se repete no mes primeiro de 05 a 08/04 e depois no dia 23/04
Com o select pretendo criar tres variáveis (diaini, diafim, cod) que serão usadas para insert em outra tabela
alguma sugestão?
$rpont = "SELECT entra, min(dia) as dtini, max(dia) as dtfin, date_format(dia, '%d/%m/%Y') as dia, sai, jornd, jornp, jorndif, oco, just FROM ponto WHERE num = '$mat' group by oco order by dia";
Nesse caso ele agrupa por codigo e me retorna como dia inicial a data correta mas a data final ele está pegando a última sem observar a ordem cronológica.
traz assim:
cod 00020 dtinicial 05-04-2009 dtfinal 23-04-2009
cod 00172 dtinicial 11-04-2009 dtfinal 11-04-2009
cod 00000 dtinicial 12-04-2009 dtfinal 25-04-2009
quando deveria ser assim:
cod 00020 dtinicial 05-04-2009 dtfinal 08-04-2009
cod 00172 dtinicial 11-04-2009 dtfinal 11-04-2009
cod 00000 dtinicial 12-04-2009 dtfinal 17-04-2009
cod 00020 dtinicial 23-04-2009 dtfinal 23-04-2009
cod 00000 dtinicial 25-04-2009 dtfinal 25-04-2009
Veja que o codigo 00020 se repete no mes primeiro de 05 a 08/04 e depois no dia 23/04
Com o select pretendo criar tres variáveis (diaini, diafim, cod) que serão usadas para insert em outra tabela
alguma sugestão?
Tenta isso:
select cod, min(data) as dtFinal, max(data) as dtFinal from tblFuncionarios where idFuncionario = '0911251' group by cod
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)