Ultimo registro da tabela

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
gab26
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Qua, 04 Jan 2017 11:01 am

Bom dia a todos, sou novo aqui, busco uma ajuda que não estou conseguindo resolver espero que alguém consiga me ajudar.

preciso valorizar o inventario da empresa em que trabalho, pra isso vou pegar o ultimo valor dos itens, estava usando o MAX, mas percebi que se fizesse isso ele iria me retorna o maior preço e não o ultimo cadastrado na tabela então mudei o MAX pra coluna de data, só que ele me traz varias linhas de resultados, e preciso apenas da ultima mas ainda com o campo de código e valor dos itens, pra depois jogar em uma planilha, vou postar o código aqui em baixo

código:

Selecionar tudo

select irec.pro_in_codigo Codigo, irec.rci_re_vlunitario Valor_unitario, max(irec.rcb_dt_documento) Data

from mgadm.est_itensreceb irec

where irec.pro_in_codigo = 701

group by irec.pro_in_codigo, irec.rci_re_vlunitario
peço por favor que se puderem me deem uma luz

obrigado.
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Boa tarde,

Veja se assim ajuda

Selecionar tudo

select irec.pro_in_codigo Codigo, irec.rci_re_vlunitario Valor_unitario, irec.rcb_dt_documento Data
from   mgadm.est_itensreceb irec
where  irec.rcb_dt_documento = (select max(rcb_dt_documento)
                                from   mgadm.est_itensreceb
                                and    pro_in_codigo = 701)
and    irec.pro_in_codigo = 701;

Desde que não tenha mais de um lançamento no mesmo dia para produto, ou que a data seja datetime.
gab26
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Qua, 04 Jan 2017 11:01 am

spernega escreveu:Boa tarde,

Veja se assim ajuda

Selecionar tudo

select irec.pro_in_codigo Codigo, irec.rci_re_vlunitario Valor_unitario, irec.rcb_dt_documento Data
from   mgadm.est_itensreceb irec
where  irec.rcb_dt_documento = (select max(rcb_dt_documento)
                                from   mgadm.est_itensreceb
                                and    pro_in_codigo = 701)
and    irec.pro_in_codigo = 701;
Desde que não tenha mais de um lançamento no mesmo dia para produto, ou que a data seja datetime.
spernega, Boa tarde

cara muito obrigado me ajudou de mais, não imaginava que era tão simples e que ia ser respondido tão rapido valeu mesmo
gab26
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Qua, 04 Jan 2017 11:01 am

spernega, Boa tarde

só uma coisa eu preciso de vários itens ao mesmo tempo, não sabia que ia mudar o resultado final desculpa,
mas pelo o que pude observar ao colocas todos os itens, ele traz só o item com a ultima data que seria hoje.

consegue me ajudar?

valeu obrigado.
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Claro, veja se da certo

Selecionar tudo

select irec.pro_in_codigo Codigo, irec.rci_re_vlunitario Valor_unitario, irec.rcb_dt_documento Data
from   mgadm.est_itensreceb irec
where  irec.rcb_dt_documento = (select max(rcb_dt_documento)
                                from   mgadm.est_itensreceb
                                and    pro_in_codigo = irec.pro_in_codigo);
gab26
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Qua, 04 Jan 2017 11:01 am

muito obrigado resolvido o problema
Ericke_Cruz
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Seg, 26 Nov 2018 10:03 am

Spernega, não sei se ainda está por aí... mas montei o código exatamente da mesma forma que você havia orientado, porém está retornando o seguinte erro:

ORA-00907: parêntese direito não encontrado

Abaixo segue o código:

Selecionar tudo

SELECT *
  FROM E210MVP A
 WHERE A.DATMOV = (SELECT MAX(DATMOV)
                     FROM E210MVP
                      AND CODPRO = A.CODPRO)
   AND A.ESTMOV = 'NO'
   AND A.FILDEP = '201'
Quando mudo o parêntese direito de lugar, conforme abaixo, ele até me traz algum resultado, mas ainda não é o que preciso, pois neste caso ele busca a última data de movimento e retorna somente o que movimentou naquela data, eu precisava que ele trouxesse o ultimo movimento de cada código independente de em qual data ele ocorreu.

Selecionar tudo

SELECT *
  FROM E210MVP A
 WHERE A.DATMOV = (SELECT MAX(DATMOV)
                     FROM E210MVP)
                      AND CODPRO = A.CODPRO
   AND A.ESTMOV = 'NO'
   AND A.FILDEP = '201'
Peço desculpas se não me fiz entender, primeiro post...
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Boa tarde, to por aqui ainda sim, meio afastado mas na ativa.
Tenta colocar um alias na sub-query

Selecionar tudo

SELECT *
  FROM E210MVP A
WHERE A.DATMOV = (SELECT MAX(b.DATMOV)
                     FROM E210MVP b
                      AND b.CODPRO = A.CODPRO)
   AND A.ESTMOV = 'NO'
   AND A.FILDEP = '201'
Editado pela última vez por DanielNN em Seg, 26 Nov 2018 2:42 pm, em um total de 1 vez.
Razão: TAG CODE
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Boa tarde,
o problema é que na tua subconsulta não existe a cláusula WHERE. Existe um AND sem o WHERE.
Ericke_Cruz
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Seg, 26 Nov 2018 10:03 am

DanielNN escreveu:Boa tarde,
o problema é que na tua subconsulta não existe a cláusula WHERE. Existe um AND sem o WHERE.
Realmente não tinha percebido... Valeu!!!
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante