SQL Ultima Data (utilizando MAX)

1 resposta
C

Bom dia gente!
Procurei um monte na Internet, achei algumas respostas aqui no blog mesmo, mas as que tentei aplicar em minha SQL, não funcionaram.
É o seguinte:
meu select envolve 3 tabelas; é para um controle de estoque, onde ele vai pegar a ID do Produto, os três tipos de quantidade, a chave de busca e uns campos padrão; mais a unidade de medida e então a data, que eu qria trazer a ultima, pois esse controle é para saber quais produtos do estoque estão zerados e pela data, quando foi a ultima saída, pra saber se precisa ou não comprar o produto novamente.
Não sei se ficou claro.

Abaixo a minha SQL:

SELECT sum(ms.qtyonhand) AS qtyonhand, sum(ms.qtyreserved) AS qtyreserved, sum(ms.qtyordered) AS qtyordered,
ms.m_product_id, mp.value, ms.ad_client_id, mp.ad_org_id, ms.isactive, mp.c_uom_id, max(mt.movementdate) as movementdate
FROM m_storage ms
INNER JOIN m_product mp ON ms.m_product_id = mp.m_product_id
INNER JOIN m_transaction mt ON mp.m_product_id = mt.m_product_id
GROUP BY ms.ad_client_id, mp.ad_org_id, ms.m_product_id, mp.value, ms.isactive, c_uom_id, movementdate
HAVING sum(ms.qtyonhand) = 0::numeric AND sum(ms.qtyreserved) = 0::numeric AND sum(ms.qtyordered) = 0::numeric;

Não retorna nenhum erro, mas ele fica procurando registros e não termina nunca. Esperei uns 5 minutos e a consulta continuava.
Para esclarecer, uso o Postgree

Desde já agradeço. :smiley:

1 Resposta

C

Bom, achei uma solução, minha SQL ficou assim:

SELECT sum(ms.qtyonhand) AS qtyonhand, sum(ms.qtyreserved) AS qtyreserved, sum(ms.qtyordered) AS qtyordered,

ms.m_product_id, mp.value, ms.ad_client_id, mp.ad_org_id, ms.isactive, mp.c_uom_id, max(mt.movementdate)

FROM m_storage ms

INNER JOIN m_product mp ON ms.m_product_id = mp.m_product_id

LEFT JOIN m_transaction mt ON mp.m_product_id = mt.m_product_id

GROUP BY ms.ad_client_id, mp.ad_org_id, ms.m_product_id, mp.value, ms.isactive, c_uom_id

HAVING sum(ms.qtyonhand) = 0::numeric

AND sum(ms.qtyreserved) = 0::numeric

AND sum(ms.qtyordered) = 0::numeric

AND max(mt.movementdate) <= now();

Demora um pouco, mas trás os resultados; vou verificar agora como fica no relatório.
Se tiverem sujestões de otimização, agradeço :smiley:

Criado 21 de janeiro de 2011
Ultima resposta 21 de jan. de 2011
Respostas 1
Participantes 1