Jump to content
Thiago Btos

Select - maior registro

Recommended Posts

Boa tarde galera.

 

Fiz um select que tras 4 informações do banco (matricula, nome, data e hora)

SELECT 
    QD1_MAT, 
    RA_NOME, 
    QD1_DTBAIX AS DATA,
    QD1_HRBAIX
FROM QD1010 QD1 
INNER JOIN SRA010 SRA ON RA_MAT = SUBSTR(QD1_MAT, 5) AND SRA.D_E_L_E_T_ <> '*'
ORDER BY QD1_DTBAIX, QD1_HRBAIX

Retornando os seguintes registros:

image.png.d89df981a1ec99f8ee0e5f22d8b720fd.png

 

 

 

Preciso retornar somente as linhas em amarelo, que seria a seguinte condição.

Caso tiver alguma matricula igual, trazer somente o registro com a maior data, junto com seu respectivo horário.

 

 

O mais próximo que consegui chegar foi utilizando o MAX para data e hora, e agrupando o restante dos campos.

SELECT QD1_MAT,RA_NOME,MAX(DATA), MAX(QD1_HRBAIX) FROM (
SELECT 
    QD1_MAT, 
    RA_NOME, 
    QD1_DTBAIX AS DATA,
    QD1_HRBAIX
    FROM QD1010 QD1 
    INNER JOIN SRA010 SRA ON RA_MAT = SUBSTR(QD1_MAT, 5) AND SRA.D_E_L_E_T_ <> '*'
    )
    GROUP BY QD1_MAT,RA_NOME

Porém na hora ele não pega o valor correspondente e sim o valor máximo.

image.png.20af610ce4a25198e9fde5d41c3479f6.png

 

 

Ai estou travado nessa parte, como faço para trazer a hora corresponde sem o restante dos registros?

Share this post


Link to post
Share on other sites

ALGO ASSIM

SELECT 
    QD1_MAT, 
    RA_NOME, 
    QD1_DTBAIX AS DATA,
    QD1_HRBAIX
FROM QD1010 QD1 
INNER JOIN SRA010 SRA ON (RA_MAT = SUBSTR(QD1_MAT, 5) AND SRA.D_E_L_E_T_ <> '*')
WHERE QD1_DTBAIX = (SELECT MAX()
                     FROM QD1010 QD1B
                     WHERE QD1B.D_E_L_E_T_ <> '*'
                     AND   QD1B.QD1_MAT = QD1.QD1_MAT)
AND QD1.D_E_L_E_T_ <> '*'                     
ORDER BY QD1_DTBAIX, QD1_HRBAIX

 

Share this post


Link to post
Share on other sites

Obrigado Motta pela sugestão, mas acabou retornou um outro resultado.

 

Fiz um ajuste no meu código e ficou assim, onde concatenei data com hora e posteriormente usei o max, trazendo um único registro:

SELECT QD1_MAT,RA_NOME,MAX(DT_BAIXA) AS DT_BAIXA FROM (
        SELECT QD1_MAT, RA_NOME, QD1_DTBAIX||' '||QD1_HRBAIX AS DT_BAIXA
        FROM QD1010 QD1 
        INNER JOIN SRA010 SRA ON RA_MAT = SUBSTR(QD1_MAT, 5) AND SRA.D_E_L_E_T_ <> '*'
        WHERE QD1.D_E_L_E_T_ <> '*'
        ORDER BY QD1_DTBAIX, QD1_HRBAIX)
    GROUP BY QD1_MAT,RA_NOME

 

Share this post


Link to post
Share on other sites

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 dfoliveira82
      Bom dia senhores,
       
      sou novo no Oracle, antes trabalhava com SQL SERVER, e me deparei com algo que ja estou a horas tentando solucionar mas nao consegui.
      Nessa Trigger que vou postar, quando mando compilar ela, fala que esta faltando uma virgula, apos o values, mas nao precisa dela e nao acho onde pode ser essa virgula faltante.
      CREATE OR REPLACE TRIGGER JOBS_CL_INSERE_USUARIO AFTER INSERT OR UPDATE OF EXPORTADA_AVA ON SITE_USUARIOS REFERENCING NEW AS NEW BEGIN INSERT INTO BLACKBEAN.TBL_USERS VALUES (NULL, 'INSERT', NULL, 'db', '0', '0', '0', TO_CHAR(:NEW.CPF), MD5(:NEW.CPF||'port@l'), TO_CHAR(:NEW.CPF), SUBSTRING(:NEW.NOME, 1, INSTR(:NEW.NOME, ' ')-1), SUBSTRING(:NEW.NOME, INSTR(:NEW.NOME, ' ')+1, LEN(:NEW.NOME)), 'email@email.com', NULL, NULL, DATE_TO_UNIX_TS(SYSDATE), NULL, NULL); END; / Se alguem puder me ajudar agradeceria.
    • By Rodrigo V
      Boa tarde pessoal, sou novo aqui e não sei se o conteúdo que estou postando está no lugar correto.
      Estou com uma dúvida no ajax de uma requisição onde o retorno do banco popula o meu select, mas o problema é que  meu select devido possuir muitos dados ( em torno de 3000 options) quando retorna o navegador da uma leve travada mas no navegado do celular(com android 9) e trava ao ponto de ter que fechar aplicação. Acredito que teria que fazer um option que carregue por demanda algo assim, mas não sei se o meu pensamento está correto, e se estiver não sei como fazer... se alguém conseguir me ajudar agradeço. segue abaixo  códigos:
       
      onde é populado o select
                 <div class="col-md-2">             <select class="btao1" id="resultados"></select>             <input id="btao1" type="submit" value="Conferir" />           </div>  
      requisicao ajax
      <script>   $(document).ready(function() {     select_resultados()     });     function select_resultados() {     $.ajax({       url: 'select_resultados.php',       method: 'GET',       success: function(dados) {         $('#resultados').html(dados);       }     });   }   </script>  
      pagina php que busca no banco 
       
      $query_select = "SELECT * FROM resultados ORDER BY id DESC"; $result_select = $connect->prepare($query_select); $result_select->execute();   while($resultado_select = $result_select->fetch(PDO::FETCH_ASSOC)){     extract($resultado_select);     echo '         <option value='.$id.'>'.$name.'</option>'; }  
       
    • By asacap1000
      Olá galera estou quebrando a cabeça aqui e não sei mais o que fazer. Estamos migrando nossa intranet que estava desatualizada demais e estamos colocando toda ela em php7.3.
      Dentro desse sistema temos varias consultas que são realizadas no Oracle. As consultas estão ocorrendo 100% mas ao chegar na plataforma de relatórios travou tudo. Não consegui acertar o meio de consultar por período, já utilizei "to_date, to_char, trunc" e nada. Interessante que no PLSQL o to_date funciona certo
      SELECT DISTINCT TO_DATE(IO.TIME_ARRIVAL)
        FROM IN_OUT IO
       WHERE TO_DATE(IO.TIME_ARRIVAL) BETWEEN '01/11/2021' AND '23/11/2021'
       
      1    04/11/2021
      2    18/11/2021
      3    17/11/2021
      4    14/11/2021
      5    22/11/2021
      6    08/11/2021
      7    11/11/2021
      8    13/11/2021
      9    09/11/2021
      10    10/11/2021
      11    05/11/2021
      12    19/11/2021
      13    15/11/2021
      14    03/11/2021
      15    06/11/2021
      16    23/11/2021
      17    01/11/2021
      18    02/11/2021
      19    16/11/2021
      20    20/11/2021
      21    12/11/2021
      22    21/11/2021
       
      Se eu utilizar ele ignora a data que estabeleci para a consulta
       TO_CHAR(IO.TIME_ARRIVAL,'DD/MM/YYYY') BETWEEN '01/11/2021' AND '23/11/2021'
       
      1    03/07/2013
      2    05/07/2013
      3    18/06/2013
      4    21/05/2013
      5    20/05/2013
      6    12/08/2013
      7    21/08/2013
      8    23/08/2013
      9    02/09/2013
      10    12/09/2013
       
      Isso no PLSQL, no caso do PHP o to_date não funciona nem gera o relatório, e no to_char funciona mas ignorando as datas apontadas.
       
      O que dá pra  fazer pra resolver isso, tenho que finalizar essa migração até final de Dezembro e estou começando a ficar preocupado com o tempo
       
      Agradeço qualquer ajuda que vier
    • By manolegal
      Boa tarde
      Tenho 5 campos do tipo select no meu formulário.  A seguir um dos campos.
      <div id="resp" class="form-group col-md-3" placeholder="Responsável" title="Pesquisar por Responsável"> <select class="form-control" id="resp" name="resp" placeholder="Responsável" title="Pesquisar por Responsável"> <option value="">Responsável</option> <?php $Sql = "SELECT ..."; $Resultado = ... while ($linha = @pg_fetch_array($Resultado)){. $id_responsavel_bd = $linha["id_responsavel"]; $nome_responsavel_bd = $linha["responsavel"]; if ($resp == $id_responsavel_bd){ echo "<option value='$id_responsavel_bd' selected = 'selected'>$nome_responsavel_bd</option>";} else{ echo "<option value='$id_responsavel_bd'>$nome_responsavel_bd</option>";} } ?> </select> </div> Tenho uma função jquery que ao selecionar qualquer um destes campos, faz uma requisição ajax para atualizar uma div do meu form.
      <script type="text/javascript"> $(document).ready(function(){ $('select').change(function(){ // Todos selects $('form').submit(function(){ var dados = $(this).serialize(); $.ajax({ type: "POST", url: 'arquivo_ajax.php', dataType: 'html', data: dados, }).done(function(data){ //console.log(data); $("#list").empty().html(data); }); return false; }); $("#meu_form").trigger('submit'); }); }); </script> Ao abrir o formulário e fazer a primeira seleção de algum campo do tipo select, é gerada uma solicitação ajax.
      O problema é que a cada nova seleção deste campo e de algum outro campo, ao invés de realizar UMA ÚNICA REQUISIÇÃO, está aumentando o número de requisições a cada nova ação.
      Como não tenho muitos conhecimentos em jquery/ajax em minha dúvida:
      - É normal ir aumentando o número de requisições?
      - Deveria sempre realizar apenas uma requisição (imagino que seja correto)?
      - Meu código está correto? Se não está, onde estou errando?
      Desde já agradeço pela colaboração.
       
       
×

Important Information

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