Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

  • 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.