Jump to content
Kennyguedes

Transformar Subquery em table para um join

Recommended Posts

Olá, preciso transformar a seguinte subquery para utilizar como uma table no join

 

NVL((SELECT X.MPE_META
    FROM (SELECT MPE_IDC_ID, MPE_META
          FROM META_PERSONALIZADA_SLA M
         ORDER BY M.MPE_META DESC) X
    WHERE ROWNUM = 1
    AND X.MPE_IDC_ID = IDC_ID
    AND X.MPE_META <= APR_NEGOCIACAO_SLA), IDC_META)

 

eu utilizo esse trecho em vários lugares dentro da minha procedure, então queria utilizar como "LEFT JOIN", assim o custo seria menor da procedure

caso seja possivel e alguem puder ajuda

Share this post


Link to post
Share on other sites

Melhore a explicação :

 

Exemplos

Estrutura etc.

 

Pense em uma FUNCTION , pode ser o casl.

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 Julio Albuquerque
      Olá!
      Preciso resolver um script MySql onde preciso efetuar cálculos como se fosse uma conta corrente, onde cada DIA tem um saldo anterior, total de entradas, total de saída e saldo atual do dia.
      Porém o próximo dia deverá ter como saldo anterior o saldo atual do dia anterior,ok?
      Bom, fiz um script que praticamente funcionou, porém em  uma subquery preciso passar o valor da linha da tabela que está sendo atualizada, mas isso não está sendo possível.
      Gostaria de ajuda, caso alguém tenha feito algo semelhante. Abaixo o script:
      update gestao_centro_financeiro_diario g1 set g1.vlsaldo_inicial = (case when idcentrofinanceirodiario = (select * from (select min(g2.idcentrofinanceirodiario) from gestao_centro_financeiro_diario g2 where g2.idcentrofinanceiro = 1) as inicial) then g1.vlsaldo_inicial else (select * from (select g3.saldo_atual from gestao_centro_financeiro_diario g3 where g3.idcentrofinanceirodiario = (select * from (select max(g4.idcentrofinanceirodiario) from gestao_centro_financeiro_diario g4 where g4.idcentrofinanceirodiario < g1.idcentrofinanceirodiario) as id)) as saldo) end), g1.saldo_atual = g1.vlsaldo_inicial + g1.total_entrada - g1.total_saida where g1.idcentrofinanceiro = 1 order by g1.data Meu problema está justamente quando no final do script, onde tem uma cláusula WHERE: ...where g4.idcentrofinanceirodiario < g1.idcentrofinanceirodiario) as id))...
      Onde a tabela g1 é a tabela que está sofrendo o UPDATE.
      Alguém pode ajudar como resolver? Desta ou de outra forma.
    • By Suporte Risti
      Bom dia, estou iniciando com bando de dados oracle e plsql e estou precisando de uma ajuda para criar um arquivo .bat para nossa empresa em que o usuário consiga apagar os horários do nosso banco de dados, mas não sei como fazer a procedure identificar o dado digitado na variável do .bat
       
      script do .bat
      @echo Off title limpeza de horarios. : inicio cls echo -------------------Informe uma data valida, apenas numeros------------------- echo . echo ------------------------------informe a data--------------------------------- set /p data = echo . echo . sqlplus usuario/senha@intancia @script.sql cls echo . : Fim echo . echo -----------------Horario apagado----------------- echo . pause O script em questão é esse, ele executa uma procedure, ela apaga os horários, o parâmetro da mesma é uma data ex: abaixo.
      set serveroutput on begin sp_apaga_horario('31072019'); end; / exit como eu faço para o dado salvo na variável data seja executado no parâmetro da procedure? não estou conseguindo fazer isso, estou tendo que alterar o script para data que o usuário quer apagar e somente executando o .bat digitando números aleatórios para que ele não trave, não sei como fazer para a mesma identificar esse dado estando em um script diferente.
       
      Quem souber e puder me ajudar ja agradeço desde já.
    • By asacap1000
      Galera não sei o porque mas n select abaixo eu preciso mostrar o ultimo registro de uma das datas que são lançadas.
      SELECT IO.ID_IN_OUT TICKET, TO_CHAR(IO.TIME_ARRIVAL, 'DD/MM/YYYY HH24:MI') CHEGADA, TO_CHAR(IO.TIME_RELEASE_IN, 'DD/MM/YYYY HH24:MI') LIBERADO, TO_CHAR(IO.TIME_IN, 'DD/MM/YYYY HH24:MI') ENTRADA, SUBSTR(SP.NAME, 0, 18) TRANSPORTADORA, SUBSTR(DR.NAME, 0, 18) MOTORISTA, VE.PLATE PLACA, (SELECT DISTINCT MAX(TOS.PLATZ) DOCA FROM PICKAUF PI, AUFTRAEGE TOS, (SELECT IO.ID_IN_OUT, MAX(IO.TIME_RELEASE_PP) TIME_RELEASE_PP, IOP.DOCUMENT, MAX(IO.TIME_OUT) TIME_OUT FROM IN_OUT IO, IN_OUT_POS IOP WHERE IO.ID_IN_OUT = IOP.ID_IN_OUT --AND IO.ART_IN_OUT IN ('CA', 'CCE', 'CC') AND IO.STAT <> '80' GROUP BY IOP.DOCUMENT, IO.ID_IN_OUT) SAD WHERE PI.CHARGE = TOS.NR_AUF AND SAD.ID_IN_OUT = IO.ID_IN_OUT AND SAD.DOCUMENT(+) = REPLACE(TRANSLATE(TOS.HINW_ZUST, '/-', ' '), ' ') GROUP BY SAD.ID_IN_OUT) DOCA FROM IN_OUT IO, SPEDITEURE SP, VEHICLE VE, TRACTOR TR, DRIVER DR WHERE IO.STAT <> '80' AND IO.TIME_ARRIVAL IS NOT NULL AND TR.ID_TRACTOR = IO.ID_TRACTOR AND DR.ID_DRIVER = IO.ID_DRIVER AND VE.ID_VEHICLE = IO.ID_VEHICLE AND IO.TIME_RELEASE_PP IS NULL AND SP.ID_SPEDITEUR = IO.ID_SPEDITEUR AND IO.ART_IN_OUT IN ('CA', 'CC', 'CCE', 'CV') and rownum = '1' ORDER BY TO_CHAR(IO.TIME_RELEASE_IN, 'DD/MM/YYYY HH24:MI') Neste Select temos as datas de CHEGADA, LIBERADO, ENTRADA. eu preciso mostrar o ultimo registro do LIBERADO. Eu já fiz um max porém não retornou.Ela será utilizada em um telão no pátio de uma empresa.
       
      O telão será desta forma
       

    • By frlopes
      Pessoal, bom dia.

      Preciso calcular em horas e minutos a diferença entre datas com horas e minutos.

      Exemplo 1:

      Data Inicial: 01/06/2006 10:30
      Data Final:   02/06/2006 11:00

      Preciso que o retorno seja: 23:30

      Exemplo 2:

      Data Inicial: 01/06/2006 10:30
      Data Final: 02/06/2006 14:00

      Preciso que o retorno seja: 27:30


      Tentei o seguinte código abaixo, porém ele dá uma diferença de 1 hora a mais. Alguém pode me ajudar? Ou me passar outra forma de fazer?
       
       
      Obrigada!
       
      1 2 3 4 5 select round(((to_number(to_date('02/06/2006 11:00','DD/MM/RRRR HH24:MI') -                          to_date('01/06/2006 10:30','DD/MM/RRRR HH24:MI')) * 1440))/60)||':'||             round((to_number(to_date('02/06/2006 11:00','DD/MM/RRRR HH24:MI') -                          to_date('01/06/2006 10:30','DD/MM/RRRR HH24:MI')) * 1440) -1440) from dual
    • By VictorPHP
      Galera preciso de ajuda,
       
      Meu campo no banco de data é data/hora, e preciso ver a hora. Quando eu faço o select me retorna apenas a data. Realizei o debug e vi que esta retornando apenas a data como varchar. Conseguem me ajudar ? 
      Ja tentei diversas conversões de data. To char, To date , Date , Strtotime ... Nada funcionou. Uso PHP 5.6.40 e banco de dados Oracle. Minha necessidade é mostrar a data e hora do evento. Alguem conhece uma solução ? 
       
      Formato no meu banco : 
      25.07.2019 05:33:00
       
      Meu codigo: 
       
      SELECT : 
       
      $sql='SELECT
      tr.tm_prf_act as prf,
      tr.tm_cod_of,
      ev.ev_nom_mac ,
      un.dt_ini_parada, 
      un.dt_fim_parada,
      un.cod_motivo,
      un.cod_mot_despachador 
      FROM unl_trens_parados un,trens tr, elem_via ev
      WHERE un.id_trem_act = tr.tm_id_trm
      AND un.id_sb = ev.ev_id_elm
      AND un.dt_ini_parada > SYSDATE -1
      AND un.id_posto = 2
      AND un.cod_motivo IN (20,28,26,50,15,30)
      AND un.dt_fim_parada IS NOT NULL
      ORDER BY un.dt_ini_parada desc ';
       
      Conexão :
      $stid=oci_parse($ora_conexao,$sql);
      oci_execute($stid);
       
      Chamando a data somente para testar : 
      $teste = oci_result($stid,'DT_INI_PARADA'); --> Estou testando o campo de data 
      echo date('d/m/Y H:m:s', strtotime($teste)); -> Chamando a data
       
      Debug ( Me retorna apenas data "25/07/2019")
      $var = $teste; -> Debugando
      var_dump($var); > Debugando
      die(); > Debugando
       
       
×

Important Information

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