Ir para conteúdo
JenneferBarbosa

Agrupar datas repetidas em linhas

Recommended Posts

Pessoal, tenho uma tabela que exibe a entrada e saída dos professores, porém elas estão em duas colunas, como mostra a figura abaixo:

image.png.b64a77e2e2262d92d8dc7504e5f7b3b9.png

 

Como fazer um select nessa tabela, para que os dados sejam exibidos da seguinte forma: 

DATA              -- ENTRADA1 --  SAÍDA1    -- ENTRADA2 -- SAÍDA2     --  HORAS TRABALHADAS

2019-08-01        08:00:00    -- 12:00:00  -- 13:31:00    -- 18:19:00 --  08:48:00

2019-08-02        07:59:00    -- 12:00:00  -- 13:30:00    -- 18:14:00 --  08:45:00   

 

Calculando a diferença entre as entradas e saída e somando para informar a hora trabalhada: HoraTrabalhada = [(Saída1 - Entrada1) + (Saída2 - Entrada2)] e agrupando as datas iguais. Se alguém puder me ajudar ficarei muito feliz e agradecida!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@JenneferBarbosa 

 

Essa tabela está um pouco mal estruturada, crie uma lógica usando a data como referência.

 

Vou fazer uma lógica em portugues e você implementa ai na linguagem que está programando.

 

DATA_ANTERIOR = VAZIO;

CONTROLADOR = 0;

LAÇO ATÉ O FIM;

    Ler TABELA - Obtem DATA e HORA;

        SE DATA DIFERENTE DATA_ANTERIOR ;

            EXIBE DATA E HORA (TABELA);

            DATA_ANTERIOR = DATA;

            ENTRADA1HORA;

            CONTROLADOR = 1;

        SE NÃO

            EXIBE HORA;

            DATA_ANTERIOR = DATA;

            SE CONTROLADOR IGUAL 1

                CONTROLADOR = 2;

                SAIDA1HORA;

            SE NÃO

                SE CONTROLADOR IGUAL 2;

                    ENTRADA2 HORA;

                    CONTROLADOR = 3;

                SE NÃO

                    SE CONTROLADOR IGUAL 3;

                        CONTROLADOR = 4;

                        SAIDA2HORA;

                    SE NÃO

                        SE CONTROLADOR IGUAL 4;

                            CONTROLADOR = 0;

                            HORATRABALHADA = ((SAIDA1ENTRADA1) + (SAIDA2 - ENTRADA2))

                            EXIBI HORATRABALHADA;

                        FIM SE;

                    FIM SE;

                FIM SE;

            FIM SE;

        FIM SE;

FIM LAÇO.

 

Bom, o caminho é mais ou menos esse, eu recomendaria você a ajustar essa tabela, mas tente implementar a lógica que passei e veja se funciona ou atende partialmente ao que você precisa.

 

Espero ter ajudado.

 

Att.

Felipe Coutinho

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 28/08/2019 at 11:18, Felipe Guedes Coutinho disse:

@JenneferBarbosa 

 

Bom, o caminho é mais ou menos esse, eu recomendaria você a ajustar essa tabela, mas tente implementar a lógica que passei e veja se funciona ou atende partialmente ao que você precisa.

 

Espero ter ajudado.

 

Att.

Felipe Coutinho

Obrigada!!! Consegui implementar  a lógica em PHP, e ajustei algumas outras coisas. Ajudou bastante! E obrigada, mais uma vez.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por dba.amaro
      Galera, bom dia/tarde/noite, 
       
      Estou desenvolvendo uma aplicação web, porém preciso mostrar algumas informações e os objetos vão mudar de cor / porcentagem, segundo as informações que estão contidas no banco de dados, 
       
      Tenho, algumas ideias, porém não sei nem por onde começar, se alguém puder ajudar, agradeço !!
       
      Um abraço  a todos e bons posts!
    • Por Santos_2015
      Galera é o seguinte,
       
      tenho filtro antes do montar meu select, tenho três campos no filtro: cod_tipo_item_despesa, data_inicio e data_fim. só que caso a data não tenha sido informada, minha consulta retorna falso, segue sql:
      select... where desp.cod_tipo_item_despesa like :cod_tipo_item_despesa and DATE_FORMAT(desp.data_despesa,'%d/%m/%Y') BETWEEN :data_inicio AND :data_fim  
      Thanks.
    • Por Santos_2015
      Boa noite,
       
      Estou com um problema em um Select, tenho dois campos, data_inicio, data_final do tipo date, estou verificando o período no meu SQL com CURDATE();
      Seria mais ou menos assim:
      Select data_inicio,data_final from periodo where {aqui eu queria se a data_final não existisse ou fosse igual '0000-00-00' comparar com a data_inicio} < (curdate() + interval 30 day)  
      Alguém tem alguma ideia? 
    • Por Santos_2015
      Gostaria de somar os períodos, ou seja, periodo_1 + periodo_2, já fiz subselects, mas mesmo assim não me trouxe resultados satisfatórios, algumas vezes apenas lista todos o registros da segunda tabela.
       
      DATEDIFF(t1.data_final_1,t1.data_inicio_1) as periodo_1, DATEDIFF(t2.data_final_2,t2.data_inicio_2) as periodo_2  
    • Por quebrandolink
      Pessoal,
       
      Tenho uma tabela com vários registros diferentes com o mesmo código.
       
      O que precisaria é exibir apenas um código e na ordem do código que tiver mais registros no banco de dados.
       
      Exemplo:
      tenho uma tabela assim (id, id_item, id_compradores, data)
      supondo que
       
      o id_item 1 tem 7 id_compradores
      o id_item 2 tem 3 id_compradores
      o id_item 3 tem 1 id_comprador
       
      gostaria de ordenar da seguinte forma com o select
       
      item 1 - 7 registros e também pegar os ids dos compradores
      item 2 - 3 registros e também pegar os ids dos compradores
      item 3 - 1 registros e também pegar os ids dos compradores
       
      Alguém tem uma idéia?
       
      tentei da seguinte forma mas não rola
       
      select * from tabela order by count(id_item) DESC
       
      obs: estou usando PHP
       
      desde já agradeço, muito obrigado.
       
      RESPOSTA:
       
      SELECT t3.id_item,t3.id_compradores FROM `table_3` as t3, (SELECT id_item,COUNT(id_item) AS num_idcomp FROM table_3 GROUP BY id_item) AS X1 WHERE X1.id_item = t3.id_item ORDER BY X1.num_idcomp DESC,t3.id_compradores DESC
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.