Duvida SQL ( Agora complicou )!

Eu não sei onde posso postar sobre duvida sql, me desculpem, entretanto eu estou empacado nisso e não consigo dar continuidade no projeto.

Gostaria de saber se alguem manja mto e possa me ajudar

Pois…

AGORA COMPLICOU !

Tenho uma Sql que traz a a qtd de reducao e o valor de cada uma

Veja a sql

SELECT [_m_cad_tipo_medida].descricao, [_m_cad_recudao_preco].valor AS valorx, Sum([_m_sub_pedido_item_modulo_produtos].quantidade) AS SomaDequantidade, [_m_cad_categorias].descricao AS categoria, [_m_cad_recudao_preco].sub_categoria, [_m_sub_pedido_item_modulo].cod_sub_pedido_item AS cod_item

FROM (_m_cad_tipo_medida INNER JOIN (_m_cad_categorias INNER JOIN _m_cad_recudao_preco ON [_m_cad_categorias].cod = [_m_cad_recudao_preco].categoria) ON [_m_cad_tipo_medida].cod = [_m_cad_recudao_preco].tipo) INNER JOIN (_m_cad_produtos INNER JOIN (_m_sub_pedido_item_modulo INNER JOIN _m_sub_pedido_item_modulo_produtos ON [_m_sub_pedido_item_modulo].cod = [_m_sub_pedido_item_modulo_produtos].cod_modulo) ON [_m_cad_produtos].cod = [_m_sub_pedido_item_modulo_produtos].cod_produto) ON [_m_cad_categorias].cod = [_m_cad_produtos].categoria

GROUP BY [_m_cad_tipo_medida].descricao, [_m_cad_recudao_preco].valor, [_m_cad_categorias].descricao, [_m_cad_recudao_preco].sub_categoria, [_m_sub_pedido_item_modulo].cod_sub_pedido_item, [_m_sub_pedido_item_modulo].cod_pedido, [_m_sub_pedido_item_modulo_produtos].corte_largura, [_m_cad_recudao_preco].validade

HAVING ((([_m_cad_tipo_medida].descricao)=‘LARGURA’) AND (([_m_cad_recudao_preco].valor)<>0) AND (([_m_cad_recudao_preco].sub_categoria) Is Null) AND (([_m_sub_pedido_item_modulo].cod_pedido)=1597) AND (([_m_sub_pedido_item_modulo_produtos].corte_largura)>0) AND (([_m_cad_recudao_preco].validade)>=#10/8/2009#));

O problema é o seguinte, na tabela de reducao pode haver por exemplo :

cod_______categoria__________tipo__________valor____validade
1_________Prateleira__________Largura_______23______09/10/2009
1_________Prateleira__________Largura_______55______14/10/2009

Isso quer dizer que… até o dia 9 a reducao de uma prateleira é de 23 reais… apos dia 14 é 55 reais

No caso esta retornando o seguinte resultado(errado pois tem 1 linhas a mais ):

descricao_________valorx________somadequantidade_______categoria________validade
LARGURA_____________23_________________1____________PRATELEIRAS 457______9/10/2009
LARGURA_____________55_________________1____________PRATELEIRAS 457______14/10/2009

Se o pedido tem data de 08/10/2009 e na Sql eu coloquei o parametro de >=#08/10/2009# ele trará 2 registro !!

Eu não posso usar o “Top” pois ele me retornará somente a 1 linha… mas como esta sql mostra reducao de todos os produtos não iria funcionar.

Sendo que eu preciso que considere apenas o 1, isto é o valor em que a data é a mais prox…

=X

entenderam o problema?

Muito Obrigado pela ajuda

Smp Grt,

Poste a Query que você tentou que eu tento te ajudar

esta ai no post amigo… a 1 query…

"SELECT [_m_cad_tipo_medida].descricao, [_m_cad_recudao_preco].valor AS valorx, Sum([_m_sub_pedido_item_modulo_produtos].quantidade) AS SomaDequantidade, [_m_cad_categorias].descricao AS categoria, [_m_cad_recudao_preco].sub_categoria, [_m_sub_pedido_item_modulo].cod_sub_pedido_item AS cod_item

FROM (_m_cad_tipo_medida INNER JOIN (_m_cad_categorias INNER JOIN _m_cad_recudao_preco ON [_m_cad_categorias].cod = [_m_cad_recudao_preco].categoria) ON [_m_cad_tipo_medida].cod = [_m_cad_recudao_preco].tipo) INNER JOIN (_m_cad_produtos INNER JOIN (_m_sub_pedido_item_modulo INNER …

"…

Você pode resolver isso utilizando uma subquery que some as quantidades daquele produto usando o mesmo parametro de data mas agrupando somente por produto.
Não consigo entender porque somar a quantidade e desconsiderar o valor sendo que cada qtd de produto terá valor diferente, mas se você fizer essa subquery acredito que irá resolver seu problema.=D

voce não entendeu

É o mesmo produto… só que o valor da reducao dele foi alterado !!! ficou mais caro no caso…

É importante eu desenvolver a sql que traga a data valida do valor…

Pq se eu quiser consultar os pedidos antigos…terao os valores antigos entendeu ? só usando parametro <=data_do_pedido…

Eu ouvi falar que o MAX resolveria pois traz o maior entre 2 registro…ou o menor ( MIN ) TANTO faz… mas ue não consigo usa-los =x

pelo que vi você só utiliza a tabela [_m_sub_pedido_item_modulo_produtos] para obter a quantidade, então acredito que uma subquery do tipo:

SELECT
[_m_cad_tipo_medida].descricao,
[_m_cad_recudao_preco].valor AS valorx,
(select
sum([_m_sub_pedido_item_modulo_produtos].quantidade)
from
[_m_sub_pedido_item_modulo_produtos]
where
[_m_sub_pedido_item_modulo].cod = [_m_sub_pedido_item_modulo_produtos].cod_modulo) AS SomaDequantidade,
[_m_cad_categorias].descricao AS categoria,
[_m_cad_recudao_preco].sub_categoria,
[_m_sub_pedido_item_modulo].cod_sub_pedido_item AS cod_item …

Resolveria. Tirando a tabela do from e colocando somente na subquery.
o uso do MIN ou MAX seria possível também utilizando subquery, porém acredito que não seja necessário. Eu particularmente tento evitar isso pra não prejudicar a performance.
Será que dessa forma resolve?

Ops, mais uma alteração.
Realmente vc vai precisar usar um mim.
Precisa fazer uma subquery trazendo a tabela

[_m_cad_recudao_preco].validade) com a restrição de >=#10/8/2009#
Aí por fora você pode fazer um MIM nessa data para obter só a primeira data após 10/08/2009.
isso?

marialvo de fato preciso do “MIN”… mas não consigo entender sua solucao…

poderia ser mais claro?

Obrigado por ate agora !!

Mto grato

sds

rsrs… desculpe eu sou enrolado pra caramba mesmo… eu tava pensando em algo do tipo:
HAVING ((([_m_cad_tipo_medida].descricao)=‘LARGURA’) AND (([_m_cad_recudao_preco].valor)<>0) AND (([_m_cad_recudao_preco].sub_categoria) Is Null) AND (([_m_sub_pedido_item_modulo].cod_pedido)=1597) AND (([_m_sub_pedido_item_modulo_produtos].corte_largura)>0) AND (SELECT
MIN(reducao2.validade) AS validade
FROM
[_m_cad_recudao_preco] as reducao2
WHERE
reducao2.categoria =[_m_cad_recudao_preco].categoria AND
reducao2.tipo) = [_m_cad_recudao_preco].tipo) AND
reducao2.sub_categoria = [_m_cad_recudao_preco].sub_categoria AND
(reducao2.validade>=#10/8/2009#) AND
(reducao2.valor<>0) AND
(reducao2.sub_categoria Is Null))
);

assim ao invés de filtrar por um período, já estaria filtrando direto pela menor data apartir de 10/8/2009.
Não sei se entendi direito a sua necessidade agora…