Auxilio para criar select

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Avatar do usuário
fabissilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Seg, 09 Set 2019 4:29 pm
Localização: Sorocaba - SP
Fabi
INSERT INTO possivel VALUES ('Nada é impossível para aquele que persiste');

Boa tarde,

Poderiam me ajudar a construir um select, tenho o seguinte cenário:

Possuo este veículos em suas respectivas empresa, filial e tipos de frotas, porém em algumas circunstancias é alterado a empresa, filial e tipo da frota do veículo, e essas alterações eu armazeno em uma tabela chamada trasnferenciaveic

Selecionar tudo

select t.codigoveic Veiculo,
       tf.codigotpfrota frota_atual,
       tf.descricaotpfrota desc_frota_atual,
       t.datatransveic,
       to_char(t.horatransveic, 'HH24:MI:SS') as horatransf,
       t.codigoempresaorigem as empresa_ori,
       t.codigoflorigem as filial_ori,
       t.codigotpfrotaanterior as frota_ori,
       vo.descricaotpfrota desc_frota_or,
       t.codigoempresadestino as empresa_dest,
       t.codigofldestino as fl_destino,
       vd.descricaotpfrota desc_frota_dest,
       t.codigotpfrotaatual as frota_dest
  from frt_transferenciaveic t
  left join frt_tipodefrota vo on vo.codigotpfrota = t.codigotpfrotaanterior
  left join frt_tipodefrota vd on vd.codigotpfrota = t.codigotpfrotaatual
  left join frt_cadveiculos atu on atu.codigoveic = t.codigoveic
  left join frt_tipodefrota tf on tf.codigotpfrota = atu.codigotpfrota
 where t.codigoveic in (515,532)
29
29
E possuo uma outra tabela que contem as peças que foram utilizadas em x veículos:

Selecionar tudo

select v.tipotab, v.datager, v.qtd, v.descricaomat, v.codigoveic  from vw_bsp_variaveisfrota v
where v.codigoveic in ( 515,532)
33
33
o que eu preciso saber seria, conforme a transferência e data:

- trazer o tipo de frota do veículo que estava no dia do uso da peça conforme o veículo.
- trazer a empresa e filial do veículo que estava no dia do uso da peça conforme o veículo.
Avatar do usuário
fabissilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Seg, 09 Set 2019 4:29 pm
Localização: Sorocaba - SP
Fabi
INSERT INTO possivel VALUES ('Nada é impossível para aquele que persiste');

Help me...
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

Olá,

Na sua tabela frt_transferenciaveic, você tem a data inicial e data final ? Ou só o campo datatransveic mesmo ???

A ideia que eu tive é, achar esse período de inicio e fim dessa tabela e depois ver se o campo datager da view vw_bsp_variaveisfrota, se enquadra em algum período !!!

Se tiver inicio e fim na tabela datatransveic fica um pouco mais fácil, se não, irá ter que "gerar" esse período, com LAG ou LEAD
Avatar do usuário
fabissilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Seg, 09 Set 2019 4:29 pm
Localização: Sorocaba - SP
Fabi
INSERT INTO possivel VALUES ('Nada é impossível para aquele que persiste');

Olá Tiago,

nesta tabela só tenho a data da transferência mesmo, pois isso estou tendo dificuldades em montar, sem contar quando tem 2 transferências do mesmo veículos no mesmo dia, neste caso tem que trazer a ultima movimentação do dia também.
Avatar do usuário
fabissilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Seg, 09 Set 2019 4:29 pm
Localização: Sorocaba - SP
Fabi
INSERT INTO possivel VALUES ('Nada é impossível para aquele que persiste');

foi feito dessa forma...

Selecionar tudo

select -- VEICULO SEM TROCA --
  v.codigoveic,
  v.codigotpfrota tp_frota,
  v.dtinicioutilveic data_inicio,
  sysdate data_fim
from
  frt_cadveiculos v
where
  v.codigoveic not in (select distinct
                         t.codigoveic
                       from
                         frt_transferenciaveic t
                       where
                         t.codigotpfrotaanterior is not null and t.codigotpfrotaanterior <> t.codigotpfrotaatual)

union all

select -- TROCAS INTERMEDIÁRIAS --
  a.codigoveic,
  a.tp_frota,
  nvl(lag(a.data,1) over (partition by a.codigoveic order by a.codigoveic, a.data),a.data_inicio) data_inicio,
  a.data

from
  (select
    v.codigoveic,
    v.dtinicioutilveic data_inicio,
    t.data,
    t.tp_frota
  from
    frt_cadveiculos v,
    (select
      t.codigoveic,
      to_date(t.datatransveic || ' ' || to_char(t.horatransveic,'HH24:MI'),'dd/mm/yy hh24:mi') data,
      t.codigotpfrotaanterior tp_frota
    from
      frt_transferenciaveic t
    where
      t.codigotpfrotaanterior is not null and t.codigotpfrotaanterior <> t.codigotpfrotaatual) t
  where
    v.codigoveic = t.codigoveic (+)) a
--where codigoveic = 515

union all

select -- ULTIMA TROCA --
  distinct t.codigoveic,
  t.codigotpfrotaatual tp_frota,
  to_date(t.datatransveic || ' ' || to_char(t.horatransveic,'HH24:MI'),'dd/mm/yy hh24:mi') data_inicio,
  sysdate data_fim
from
  frt_transferenciaveic t,
  (select
    t.codigoveic,
    max(to_date(t.datatransveic || ' ' || to_char(t.horatransveic,'HH24:MI'),'dd/mm/yy hh24:mi')) data
  from
    frt_transferenciaveic t
  where
    t.codigotpfrotaanterior is not null and t.codigotpfrotaanterior <> t.codigotpfrotaatual
  group by
    t.codigoveic) m
where
  t.codigotpfrotaanterior is not null and t.codigotpfrotaanterior <> t.codigotpfrotaatual and
  to_date(t.datatransveic || ' ' || to_char(t.horatransveic,'HH24:MI'),'dd/mm/yy hh24:mi') = m.data
  --and t.codigoveic = 515
;
obrigada pela dica :wink:
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

Olá,

Que bom que deu certo !

Imagina... Precisando é só gritar !!!

[ ]s
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 41 visitantes