Jump to content
  • 0
Ruben Santos

Consulta dupla SQL na mesma tabela

Question

Boa tarde,
Sou novo no fórum e tambem em programação SQL, no entanto não desisto de procurar soluções e tentar aprender cada vez mais e melhor.

Venho aqui pedir ajuda sobre o seguinte assunto:


 


Estou trabalhando com Access e a tabela em questão apresenta as operações realizadas (tempo de trabalho) no caso de ter interrupção, a interrupção tem a durabilidade desde o fim da operação até ao inicio da proxima operação

Então sobre esta tabela, faço a seguinte pesquisa para saber, quantas interrupções tenho e a que horas interromperam:

Dei o nome de "Inicio_interrupcoes"

 

SELECT dbo_opr.cod_gpt, dbo_opr.cod_pt, dbo_opr.un_pt, 
       dbo_opr.data_ini, dbo_opr.data_fim, dbo_opr.cod_interrup, *
FROM dbo_opr
WHERE (((dbo_opr.cod_interrup) Is Not Null));

 

Este comando, executa corretamente, retornando todos os registos em que cod.interrup seja não nulo.

Seguindo agora o código onde preciso milagrosamente de ajuda:

 

SELECT inicio_interrupcoes.cod_gpt, inicio_interrupcoes.cod_pt, inicio_interrupcoes.un_pt, 
       inicio_interrupcoes.data_fim, inicio_interrupcoes.cod_interrup
FROM dbo_opr 
INNER JOIN inicio_interrupcoes ON (dbo_opr.cod_gpt = inicio_interrupcoes.cod_gpt) AND (dbo_opr.cod_pt = inicio_interrupcoes.cod_pt)
GROUP BY inicio_interrupcoes.cod_gpt, inicio_interrupcoes.cod_pt, inicio_interrupcoes.un_pt, 
         inicio_interrupcoes.data_fim, inicio_interrupcoes.cod_interrup, dbo_opr.data_ini
HAVING (((dbo_opr.data_ini)>[inicio_interrupcoes].[data_fim]));


Passando agora a explicar o que preciso:

Na primeira consulta "Inicio_Interrupcoes" pesquiso todas os registos que contenham o campo "cod_interrup" preenchido.

Na segunda consulta respeitando os campos "cod_gpt" e "cod_pt", pretendo obter a data de inicio da proxima operação que nesta consulta representa o fim da interrupção.

Segue exemplo básico:
considerem linha 2 e linha 3 da imagem:
Linha 2 representa produção -> Inicio = 10/01/2019 08:21:13
                               Fim = 10/01/2019 12:54:30

Como o registo tem "Cod_interrup" considero que "10/01/2019 12:54:30" representa o inicio da interrupcão e o proximo inicio neste caso "10/01/2019 14:04:53" será o fim da interrupção e inicio da Produção.


Alguem me pode dar uma força neste assunto?

Obrigado, ficarei muito grato.

ajuda.png

Share this post


Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By johnklo
      COM BASE NA TABELA HR DO ORACLE
      Preciso criar uma sub-rotina (procedure) que imprima na tela o número de funcionários (employees) agrupados por departamentos (department_id). Deve-se ordenar a saída em ordem decrescente pela quantidade de departamentos. Pode-se utilizar qualquer forma de cursor para imprimir o resultado.
    • By c3s1nha
      Boa tarde,
       
      Preciso restaurar a estrutura de um banco de dados (tabelas,views,procedures.. etc) em outro banco de dados que esta vazio (nao tem tabela nenhuma, banco novo), utilizo o sql server. Consigo fazer utilizando o SSMS ?
       
      Para entender melhor estou enviando uma imagem.
       
       
      O banco com todas tabelas,viwes,procedures, registros, etc..  é o Guara_ que esta no servidor   .\SQLEXPRESS   quero fazer uma copia identica dele no banco Nutri no servidor sdb.hsi.
       
      Desde ja agradeço. 

    • By alanbr00
      Olá,
       
      estou tendo dificuldade na instalação, nunca vi esse erro. Estou pensando seriamente em formatar.
       
      Esse é o log.
       
       


    • By PierreMoraes
      Olá a todos sou novo no grupo porem ja peguei muita solução aqui no forum.
      Gostaria da ajude devocês pois estou com uma dificuldade em meu site. Tenho um painel ADMININSTRATIVO em meu site e tenho aceso a visão de algumas coisas dos usuarios como quantidade de logins, nivel de acesso, nome, sobrenome, email e outras coisas refetente ao conteúdo do site.
      Ai vem minha dúvida preciso pegar o IP dos usuarios no meu banco de dados e sim ja tenho essa função, porem ele fica misturado com de todos outros, montei o mesmo para visualização dos ultimos 8 aceessos com data assim:
       
      <tbody> <?php $qnt_result_pg = 8; $stmtt=$bdd->prepare("SELECT * FROM vanguard_singin WHERE name_user=? ORDER BY id desc LIMIT $qnt_result_pg"); $stmtt->execute(array($_SESSION['vg_usern'])); while($rowip=$stmtt->fetch(PDO::FETCH_ASSOC)) { ?> <tr> <td><?php echo $rowip['ip']; ?></td> <?php $source = $rowip['dt_log']; $date = new DateTime($source); ?> <td><?php echo $date->format('d/m/Y G:y'); ?></td> </tr> <?php } ?> </tbody> e funciona perfeito porem preciso implementar essa função no meu painel, lembrando que esse código acima ele serve apenas para o proprio usuario visualizar.
       
      ESSE É DO PAINEL
      <tbody> <?php $query = "SELECT * FROM vanguard_users"; $stmt = $bdd->prepare( $query ); $stmt->execute(); while($row_usuario=$stmt->fetch(PDO::FETCH_ASSOC)) { $result_items2 = $bdd->query('SELECT count(1) FROM vanguard_items WHERE author="' .$row_usuario['usern']. '"'); $row_items2 = $result_items2->fetch(); $total_items2 = $row_items2[0]; $result_follow = $bdd->query("SELECT count(1) FROM vanguard_follow WHERE id_following = {$row_usuario['id']}"); $row_follow = $result_follow->fetch(); $total_follow = $row_follow[0]; $result_follower = $bdd->query("SELECT count(1) FROM vanguard_follow WHERE id_follower = {$row_usuario['id']}"); $row_follower = $result_follower->fetch(); $total_follower = $row_follower[0]; extract($row_usuario); $name_user = $row_usuario['usern']; $result_ip = $bdd->prepare('SELECT COUNT(ip) FROM vanguard_singin WHERE name_user = "' .$row_usuario['usern']. '"'); $result_ip->execute(array($name_user)); $result_ip = $result_ip->fetchColumn(); ?> <tr class="odd gradeX"> <td width="1%" class="f-s-600 text-white-transparent-8"> <?php echo $row_usuario['id']; ?> </td><!-- ID --> <td width="1%" class="with-img"> <img src="<?= $url; ?>static/img/avatars/<?php echo $row_usuario['avatar']; ?>" class="img-rounded height-30" /> </td><!-- PHOTO --> <td> <?php echo $row_usuario['usern']; ?> </td><!-- USERNAME --> <td> <?php echo $row_usuario['lname']; ?> </td><!-- NOME --> <td> <?php echo $row_usuario['fname']; ?> </td><!-- SOBRENOME --> <td> <?php if ($row_usuario['role'] == "1") { echo '<h5 class="text1">'.$lang['CLASS_01'].'<h5>'; } elseif ($row_usuario['role'] == "2") { echo '<h5 class="text2">'.$lang['CLASS_02'].'<h5>'; } elseif ($row_usuario['role'] == "3") { echo '<h5 class="text3">'.$lang['CLASS_03'].'<h5>'; } elseif ($row_usuario['role'] == "4") { echo '<h5 class="text4">'.$lang['CLASS_04'].'<h5>'; } elseif ($row_usuario['role'] == "5") { echo '<h5 class="text5">'.$lang['CLASS_05'].'<h5>'; } elseif ($row_usuario['role'] == "6") { echo '<h5 class="text6">'.$lang['CLASS_06'].'<h5>'; } elseif ($row_usuario['role'] == "7") { echo '<h5 class="text7">'.$lang['CLASS_07'].'<h5>'; } else { echo '<h5 class="">'.$lang['CLASS_00'].'<h5>'; }; ?> </td><!-- NIVEL DE ACESSO --> <td> <?php echo $row_usuario['created']; ?> </td><!-- DATA DE CRIAÇÃO --> <td> <?php echo $row_usuario['email']; ?> </td><!-- EMAIL --> <td> <?php echo $row_usuario['quotas']; ?> </td><!-- QUOTA DE POSTS --> <td> <?php echo $row_ip['ip']; ?> </td><!-- IP --> <td> <?php if ($total_items2 == 0) { ?>0<?php } ?><?php if ($total_items2 > 0) { ?><?php echo $total_items2; ?><?php } ?> </td><!-- ITENS POSTADOS NA PAGINA DOWNS --> <td> <?php echo $total_follower; ?> </td><!-- SEGUINDO --> <td> <?php echo $total_follow; ?> </td><!-- SEGUIDOR --> <td> <?php echo $result_ip; ?> </td><!-- LOGINS TOTAL --> <td class="with-btn" nowrap> <a href="<?= $url; ?>edit_usuario/<?php echo $row_usuario['id']; ?>" class="btn btn-sm btn-primary width-60 m-r-2">Editar</a> <?php if ($row_usuario['status'] == "2") { ?> <a href="<?= $url; ?>edit_ban/<?php echo $row_usuario['id']; ?>" class="btn btn-sm btn-warning">DesBanir</a> <?php }else{ ?> <a href="<?= $url; ?>edit_ban/<?php echo $row_usuario['id']; ?>" class="btn btn-sm btn-danger">Banir</a> <?php } ?> </td><!-- OPÇÕES DE EDITAR E BANIR --> </tr> <?php } ?> </tbody> Só deixar claro aqui sei que ninguém aqui é leigo mais para adiantar e talvez não haver confusão:
       
      Esse inicio de código seria o que chama a tabela dos usuários e seus dados: 
       $query = "SELECT * FROM vanguard_users";
                                              $stmt = $bdd->prepare( $query );
                                              $stmt->execute();
                                              while($row_usuario=$stmt->fetch(PDO::FETCH_ASSOC))
                                              {
       
      Essa segunda parte é uma segunda tabela onde chama algumas informações referente á um serviço do site:
      $result_items2 = $bdd->query('SELECT count(1) FROM vanguard_items WHERE author="' .$row_usuario['usern']. '"');
                                                  $row_items2 = $result_items2->fetch();
                                                  $total_items2 = $row_items2[0];
       
      Essa terceira parte chama outra tabela e informa outros dados referente ao perfil do usuario:
      $result_follow = $bdd->query("SELECT count(1) FROM vanguard_follow WHERE id_following = {$row_usuario['id']}");
                                                  $row_follow = $result_follow->fetch();
                                                  $total_follow = $row_follow[0];
       
      $result_follower = $bdd->query("SELECT count(1) FROM vanguard_follow WHERE id_follower = {$row_usuario['id']}");
                                                  $row_follower = $result_follower->fetch();
                                                  $total_follower = $row_follower[0];
       
       
      Essa quarta parte chama a quantidade de logins do usuario :
      Obs que esse é a mesma TABELA que preciso acessar para ver o IP do usuário porem ele só contabiliza os IP do mesmo usuário e soma assim dando a quantidade de logins no site.
       
      extract($row_usuario);
                                                  
                                                  $name_user = $row_usuario['usern'];
                                                  $result_ip = $bdd->prepare('SELECT COUNT(ip) FROM vanguard_singin WHERE name_user = "' .$row_usuario['usern']. '"');
                                                  $result_ip->execute(array($name_user));
                                                  $result_ip = $result_ip->fetchColumn();
       
      Preciso dessa mesma tabela visualizar os ultimos logins e me informar o IP como mostro no inicio da publicação.
      Quem puder ajudar agradeço muitissímo.
      Abraço a todos e um ótimo final de semana.
    • By alextds
      Tenho as seguintes tabelas com os dados:
          table_ent                                            |   table_out
          cod_prod   date_ent     vl_prod       |   cod_prod   date_out       vl_prod  
          362        14/09/2015   100,00         |   362        01/10/2016     700,00
          362        15/09/2015   150,00         |   362        07/10/2016     800,00
          362        16/09/2015   10,00           |   362        29/10/2016     100,00
          362        05/10/2016   20,00           |   362        01/10/2016     800,00       
          362        06/10/2016   300,00         |
          362        07/10/2016   460,00         |
          362        08/10/2016   510,00         |
          362        23/10/2016   620,00         |
          362        24/10/2016   750,00         |
          362        25/10/2016   810,00         |
          362        30/10/2019   920,00         |
       
       
      Usei um inner join com max(date)  porém o resultado gerado foi esse :
          cod_ent  date_out   vl_ent      cod_ent  vl_ent  date_ent
          ------          --------         ------            ---          ---          -------
          362         01/10/16    700         362       100      14/09/15
          362         01/10/16    800         362       10      16/09/15
          362         01/10/16    700         362       150      15/09/15
          362         01/10/16    700         362       10      16/09/15
          362         01/10/16    800         362       150      15/09/15
          362         01/10/16    800         362       100      14/09/15
          362         07/10/16    100         362       20      05/10/16
          362         07/10/16    100         362       300      06/10/16
          362         07/10/16    100         362       100      14/09/15
          362         07/10/16    100         362      10      16/09/15
          362         07/10/16    100         362      150      15/09/15
          362         29/10/16    920         362      510      08/10/16
          362         29/10/16    920         362      750      24/10/16
          362         29/10/16    920         362      460      07/10/16
          362         29/10/16    920         362      10      16/09/15
       
      Preciso obter este resultado abaixo :
          cod_ent  date_out   vl_ent   cod_ent  vl_ent  date_ent
          ------   --------   ------   ---      ---     -------
          362         01/10/16    700         362      100      14/09/15
          362         01/10/16    800         362      10      16/09/15
          362         07/10/16    100         362      20      06/10/16
          362         29/10/16    920         362      750      25/10/16
       
      estou usando o seguinte script:
      select a.cod_prod, a.date_out, a.vl_prod, sum(b.cod_prod) as cod_prod, sum(b.vl_prod) vl_prod, max(b.date_ent) as date_ent
      from table_out a
      join table_ent b on b.cod_prod = a.cod_prod and b.date_ent < a.date_out
      group by a.cod_prod, a.date_out, b.cod_prod, a.vl_prod, b.vl_prod
      order by a.cod_prod, a.date_out;
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.