Query de roctina para ajuste de preços

Forum sobre SQL.

Moderador: Moderadores

alexlucc
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 13 Nov 2016 19:19
Localização: Nova Iguaçu /rj

Query de roctina para ajuste de preços

Mensagem por alexlucc »

Bom dia Pessoal!!

Preciso de uma ajuda.

Tenho a seguinte situação:

Duas tabelas produtos e produtos alterados no mysql

Preciso de uma Query que pegue o último preço da tabela "produtos alterados" levando em consideração a data e hora e grave no campo preço de venda
da tabela "produtos".

Segue exemplo dos registros das tabelas:

1) tabela produtos alterados

cod descricao preço dataalt hora
29 NEOPIRIDIN SPRAY MENTA 50ML NEO QUIMICA 12,99 26/11/2021 11:23:10
29 NEOPIRIDIN SPRAY MENTA 50ML NEO QUIMICA 19,99 26/11/2021 12:45:03

2) tabela produtos

cod descricao preco

29 NEOPIRIDIN SPRAY MENTA 50ML NEO QUIMICA 12,99
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Query de roctina para ajuste de preços

Mensagem por alxsts »

Olá!

Este é um problema fácil de resolver mas, a solução pode depender de alguns fatores:
- qual banco de dados utiliza?
- qual a versão?
- qual o tipo de dado dos campos de data e hora?
- estes campos estão juntos (tipo datetime ou timestamp) ou separados?
[]´s
Alexandre Santos (AlxSts)
alexlucc
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 13 Nov 2016 19:19
Localização: Nova Iguaçu /rj

Query de roctina para ajuste de preços

Mensagem por alexlucc »

Ola Alexandre,

Desculpa a demora nas respostas:
alxsts escreveu:Este é um problema fácil de resolver mas, a solução pode depender de alguns fatores:
- qual banco de dados utiliza?
- qual a versão?
- qual o tipo de dado dos campos de data e hora?
- estes campos estão juntos (tipo datetime ou timestamp) ou separados?
banco mysql versao 6.00
campos data tipo date e hora tipo char.
os campos são separados.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Query de roctina para ajuste de preços

Mensagem por alxsts »

Olá!

Código: Selecionar todos

/* tabela de produtos alterados */
create or replace table tbProdAlt (
   id int auto_increment,  
   cod decimal(4) not null, 
   descricao varchar(100), 
   preco decimal(10,3),
   dataalt date, 
   hora varchar(8),
   created_at timestamp default current_timestamp,
   primary key(id)
);

/* inserindo registros na tabela de produtos alterados */
insert into tbProdAlt (cod, descricao, preco, dataalt, hora) values 
(29, 'NEOPIRIDIN SPRAY MENTA 50ML NEO QUIMICA', 12.99, '2021-11-26', '11:23:10'), 
(29, 'NEOPIRIDIN SPRAY MENTA 50ML NEO QUIMICA', 19.99, '2021-11-26', '12:45:03');

/* tabela de produtos */
create or replace table tbProd (
   id int auto_increment,  
   cod decimal(4) not null, 
   descricao varchar(100), 
   preco decimal(10,3),
   primary key(id)
);

/* inserindo um registro tabela de produtos */
insert into tbProd (cod, descricao, preco) values 
(29, 'NEOPIRIDIN SPRAY MENTA 50ML NEO QUIMICA', 12.99);

/* atualizando */
update
  tbProd as p
  inner join (
     /* se os campos de data e hora fossem juntos (datetime ou timestamp), não precisaria desta manobra de concat e cast...*/
     select cod, preco, cast( CONCAT_WS( " ", cast( dataalt as char), hora ) as datetime ) as dthora 
       from tbProdAlt 
       order by dthora desc limit 1
  ) as a on a.cod = p.cod
set p.preco = a.preco
where p.cod = 29;

/* verificando o resultado */
select * from tbProd;

id  cod descricao                               preco
1   29  NEOPIRIDIN SPRAY MENTA 50ML NEO QUIMICA 19.990

[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Query de roctina para ajuste de preços

Mensagem por alxsts »

Olá

Testei no MariaDB. Se no MySQL 6 não funcionar create or replace, troque por create apenas...
[]´s
Alexandre Santos (AlxSts)
Responder