Agrupamente Para Retornar ultimo Registro

Firebird

12/04/2005

Ola

To com um problema preciso retornar um registro de cada produto que contenha a ultima data e Valor_Total. Na instrução abaixo os código se repetem mas eu preciso apenas a informacao do registro mais recente isso é a data e o valor. Como está sei que o primeiro registro de cada produto é correto mas quero eliminar os demais. Como faze-lo ? Veja abaixo

Select Venda_Itens.Codigo_Filial,
Codigo_Produto, Venda_Itens.Valor_Total, MAX(Venda_Itens.Data)
from Venda_Total, Venda_Itens
Where Venda_Total.Numero_Venda = Venda_Itens.Numero_Venda
And Venda_Total.Codigo_Serie = Venda_Itens.Codigo_serie
And Venda_Total.Codigo_Filial = Venda_Itens.Codigo_Filial
And (Venda_Total.Data >= ´01/01/2000´ And
Venda_Total.Data <= ´12/31/2005´)
And Venda_Total.Codigo_Filial = 1
group by Venda_Itens.Codigo_Filial, Codigo_Produto, Venda_Itens.Valor_Total
Order By Venda_Itens.Codigo_Filial, Codigo_Produto, Venda_Itens.Valor_Total Desc;

Grato

Marcos Roberto


Marcosrodias

Marcosrodias

Curtidas 0

Respostas

Fsflorencio

Fsflorencio

12/04/2005

Posta pra gente as estruturas das tabelas.


GOSTEI 0
Marcosrodias

Marcosrodias

12/04/2005

Ola

Segue a Estrutura da Tabela

CREATE TABLE ´VENDA_ITENS´
(
´NUMERO_VENDA´ INTEGER NOT NULL,
´CODIGO_FILIAL´ INTEGER NOT NULL,
´CODIGO_SERIE´ INTEGER NOT NULL,
´CODIGO_CLIENTE´ INTEGER NOT NULL,
´CODIGO_VENDEDOR´ INTEGER NOT NULL,
´DATA´ DATE,
´CODIGO_PRODUTO´ INTEGER NOT NULL,
´NUMERO_ITEM´ INTEGER,
´TIPO_VENDA_TROCA´ CHAR(1),
´SITUACAO_TRIBUTARIA´ CHAR(1),
´QTD´ DOUBLE PRECISION,
´VALOR_UNITARIO´ DOUBLE PRECISION,
´VALOR_DESCONTO´ DOUBLE PRECISION,
´PERCENTUAL_DESCONTO´ DOUBLE PRECISION,
´VALOR_TOTAL´ DOUBLE PRECISION,
´VALOR_COMISSAO´ DOUBLE PRECISION,
´CUSTO_COMPRA´ DOUBLE PRECISION,
´IMPOSTO_FEDERAL´ DOUBLE PRECISION,
´IMPOSTO_ESTADUAL´ DOUBLE PRECISION,
´IMPOSTO_MUNICIPAL´ DOUBLE PRECISION,
´CUSTO_OPERACIONAL´ DOUBLE PRECISION,
´CUSTO_COMISSAO´ DOUBLE PRECISION,
´CUSTO_ENCARGOS´ DOUBLE PRECISION,
´CUSTO1´ DOUBLE PRECISION,
´CUSTO2´ DOUBLE PRECISION,
´CUSTO3´ DOUBLE PRECISION,
´CUSTO4´ DOUBLE PRECISION,
´CUSTO5´ DOUBLE PRECISION,
´CUSTO6´ DOUBLE PRECISION,
´FLAG´ CHAR(1),
´CST´ CHAR(2),
´ICMS´ DOUBLE PRECISION,
´BASE_ICMS´ DOUBLE PRECISION,
´VALOR_ICMS´ DOUBLE PRECISION,
´ICMS_SUBS´ DOUBLE PRECISION,
´BASE_ICMS_SUBS´ DOUBLE PRECISION,
´VALOR_ICMS_SUBS´ DOUBLE PRECISION,
´IPI´ DOUBLE PRECISION,
´BASE_IPI´ DOUBLE PRECISION,
´VALOR_IPI´ DOUBLE PRECISION,
´ISS´ DOUBLE PRECISION,
´BASE_ISS´ DOUBLE PRECISION,
´VALOR_ISS´ DOUBLE PRECISION,
´SITUACAO´ CHAR(1),
´TIPO_MOVIMENTACAO´ CHAR(1)
);

Obrigado

Marcos Roberto


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

12/04/2005

creio que dessa forma deva funcionar:
Select VI.Codigo_Filial, VI.Codigo_Produto, MAX(VI.Data) Data,
      (select max(VI2.Valor_Total)
       from Venda_Itens VI2
       where VI2.Data=MAX(VI.Data) and VI2.Codigo_Produto=VI.Codigo_Produto
         and VI2.Codigo_Filial=VI.Codigo_Filial) Valor_Total
from Venda_Total VT
inner join Venda_Itens VI on (VI.Numero_Venda=VT.Numero_Venda
  and VI.Codigo_serie=VT.Codigo_Serie and VI.Codigo_Filial=VT.Codigo_Filial)
where (VT.Data between ´01/01/2000´ And ´12/31/2005´)
  and VT.Codigo_Filial = 1
group by VI.Codigo_Filial, VI.Codigo_Produto
order By VI.Codigo_Filial, VI.Codigo_Produto, 4 Desc



GOSTEI 0
Marcosrodias

Marcosrodias

12/04/2005

Valeu Emerson. Foi na mosca

Muito obrigado


GOSTEI 0
POSTAR