Agrupando datas diferentes e somando

MySQL

17/12/2014

Olá, bom dia a todos.

Estou com um problema tenho uma query montada onde me traz o saldo de pedido, saldo de estoque e a diferença que eu preciso produzir, porém existem casos que o mesmo item em prazo de entregas diferentes eu queria agrupar as datas e somar.

Hoje esta assim?

[img]http://arquivo.devmedia.com.br/forum/imagem/402654-20141217-090232.jpg[/img]


Gostaria que ficasse assim porém preservase o campo prz_entrega pois eu consigo que ele agrupe e some porém tenho que tirar o campo prz_entrega e esse campo eu vou precisar utilizar ele para realizar filtros com isso gostaria do resultado abaixo porém com o campo prz_entrega aparecendo.

[img]http://arquivo.devmedia.com.br/forum/imagem/402654-20141217-090306.jpg[/img]
Dagoberto Neto

Dagoberto Neto

Curtidas 0

Melhor post

Marisiana Battistella

Marisiana Battistella

17/12/2014

Por que vc não incluir apenas a maior data de entrega?
GOSTEI 1

Mais Respostas

Dagoberto Neto

Dagoberto Neto

17/12/2014

Marisiana, boa tarde e obrigado pela atenção.

Então não posso colocar uma data especifica, pois esta query vai virar um relatório e este relatório um dos campos que estará disponível para o usuário realizar filtro é o prz_entrega onde ele vai colocar a data que ele quiser entendeu ou seja prz_entrega <= 'Data x'.
GOSTEI 0
Alex Lekao

Alex Lekao

17/12/2014

Ola Boa tarde!!!

Entao, acredito que a sugestao da Marisiana sugeriu era para vc usar alguma opcao de max(prz_entrega) por exemplo(isso existe assim no sql server, nao sei se no mysql eh assim tbm. rsrsr) ai vc faz os agrupamentos e calculos que vc deseja e faz uso da maior data.

Se entendi bem, seria por isso a sugestao. rsrsr

Abraco.
GOSTEI 0
Isaac Jose

Isaac Jose

17/12/2014

vc nao pode deixar com o max(prazo de entrega) e somar o resto?
GOSTEI 0
Isaac Jose

Isaac Jose

17/12/2014

Ola Boa tarde!!!

Entao, acredito que a sugestao da Marisiana sugeriu era para vc usar alguma opcao de max(prz_entrega) por exemplo(isso existe assim no sql server, nao sei se no mysql eh assim tbm. rsrsr) ai vc faz os agrupamentos e calculos que vc deseja e faz uso da maior data.

Se entendi bem, seria por isso a sugestao. rsrsr

Abraco.


karaka lekao respondemos ao mesmo tempo...kkkkk
e o seu relatorio funcionou?
abraços
GOSTEI 1
Alex Lekao

Alex Lekao

17/12/2014

kkkk....

num eh cara?? rsrsr

vixi Isaac, qual deles? rsrsr

eu consegui fazer alguns que estava precisando, mas dei uma parada para resolver outras coisas e nao tive como continuar. rsrr
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

17/12/2014

Marisiana, boa tarde e obrigado pela atenção.

Então não posso colocar uma data especifica, pois esta query vai virar um relatório e este relatório um dos campos que estará disponível para o usuário realizar filtro é o prz_entrega onde ele vai colocar a data que ele quiser entendeu ou seja prz_entrega <= 'Data x'.


Se o objetivo é obter o total de entregas no período que o usuário filtrou, não tem necessidade de incluir o campo prazo de entrega no SELECT, apenas realiza a restrição do retorno filtrando os dados em que o prazo de entrega esteja no período informado pelo usuário.
Se quiser postar o select que vc está fazendo, fica mais fácil te ajudar....
GOSTEI 1
Dagoberto Neto

Dagoberto Neto

17/12/2014

Então eu tenho que respeitar as datas que estão no prz_entrega, pois um exemplo hoje é dia 18 mas quero ver as entregas que já tenho a frente para trás ai o usuário no campo prz_entrega no relatorio vai colocar prz_entrega <= '23-12-2014' ai vai ser executado o relatório e o que tiver do dia 23 pra trás ele vai trazer e caso exista o mesmo item no dia 18,20 e 23 ele já me traga somado, abaixo o select...

SELECT
a.cod_empresa
,a.cod_item
,c.den_item
,c.den_item_reduz
,c.cod_unid_med
,a.prz_entrega
,sum(a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel)saldo_pedidos
,(SELECT (z.qtd_liberada) FROM estoque z WHERE z.cod_empresa = a.cod_empresa AND z.cod_item = a.cod_item) AS saldo_estoque
,((SELECT (z.qtd_liberada) FROM estoque z WHERE z.cod_empresa = a.cod_empresa AND z.cod_item = a.cod_item) - sum(a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel))dif_receb
,(SELECT b.den_estr_linprod FROM linha_prod b WHERE b.cod_lin_prod = c.cod_lin_prod AND b.cod_lin_recei = '0' AND b.cod_seg_merc = '0')teste_a
,(SELECT b.den_estr_linprod FROM linha_prod b WHERE b.cod_lin_prod = c.cod_lin_prod AND b.cod_lin_recei = c.cod_lin_recei AND b.cod_seg_merc = '0')teste_b

FROM ped_itens a

JOIN item c
ON(c.cod_empresa = a.cod_empresa)
AND(c.cod_item = a.cod_item)
AND(c.ies_situacao = 'A')
AND(c.ies_tip_item = 'F')

WHERE (a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel) > '0'

GROUP BY
a.cod_empresa
,a.cod_item
,c.den_item
,c.den_item_reduz
,c.cod_unid_med
,a.prz_entrega
,teste_a
,teste_b
GOSTEI 0
Alex Lekao

Alex Lekao

17/12/2014

Oi Bom dia!!!

Nesse caso que vc citou, a opcao max(prz_entrega) ja resolveria, eh claro que nao sei se no mysql eh esse comando tbm. rsrsr

se nao estou enganado ele ja eh um agrupamento, entao ja resolveria o que vc precisa, sem informar no group by.

Acredito que ficaria mais ou menos assim:

SELECT
   a.cod_empresa
   ,a.cod_item
   ,c.den_item
   ,c.den_item_reduz
   ,c.cod_unid_med
   ,max(a.prz_entrega) as prz_entrega
   ,sum(a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel)saldo_pedidos
   ,(SELECT (z.qtd_liberada) FROM estoque z WHERE z.cod_empresa = a.cod_empresa AND z.cod_item = a.cod_item) AS saldo_estoque
   ,((SELECT (z.qtd_liberada) FROM estoque z WHERE z.cod_empresa = a.cod_empresa AND z.cod_item = a.cod_item) - sum(a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel))dif_receb
  ,(SELECT b.den_estr_linprod FROM linha_prod b WHERE b.cod_lin_prod = c.cod_lin_prod AND b.cod_lin_recei = '0' AND b.cod_seg_merc = '0')teste_a
   ,(SELECT b.den_estr_linprod FROM linha_prod b WHERE b.cod_lin_prod = c.cod_lin_prod AND b.cod_lin_recei = c.cod_lin_recei AND b.cod_seg_merc = '0')teste_b
   
FROM ped_itens a

JOIN item c
   ON(c.cod_empresa = a.cod_empresa)
   AND(c.cod_item = a.cod_item)
   AND(c.ies_situacao = 'A') 
   AND(c.ies_tip_item = 'F') 

WHERE (a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel) > '0'

GROUP BY
   a.cod_empresa
   ,a.cod_item
   ,c.den_item
   ,c.den_item_reduz
   ,c.cod_unid_med
   ,teste_a
   ,teste_b


espero ter ajudado.

Abraco.
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

A todos bom dia, como é bom participar de um fórum como este, estava tentando varias maneiras e não estava tendo êxito mas acho que agora com a ideia da Marisiana e o reforço do Lekão, acho que esse é o caminho e a solução, vou fazer alguns testes antes de fechar o fórum, mas show de bola mesmo, estou muito grato pela ajuda.
GOSTEI 1
Marisiana Battistella

Marisiana Battistella

17/12/2014

Eu posso até estar enganada, mas eu acho que o teu SQL não está atendendo a regra que vc quer que atenda...
Se você precisa filtrar as entregar dentre um periodo que o usuário vai informar, vc deve restringir o retorno da consulta filtrando os registros que estão dentre esse periodo.
Ou seja, incluindo
WHERE prz.entrega BETWEEN in_datainicial AND in_datafinal


Outro detalhe que me chamou atenção você definiu
JOIN item c
ON(c.cod_empresa = a.cod_empresa)
AND(c.cod_item = a.cod_item)
AND(c.ies_situacao = ''A'') 
AND(c.ies_tip_item = ''F'') 

Se as restrições AND(c.ies_situacao = ''A'') e AND(c.ies_tip_item = ''F'') são uma regra que a consulta todasdeve atender, elas devem estar definidas na clausula WHERE e não no JOIN entre as tabelas.
GOSTEI 1
Dagoberto Neto

Dagoberto Neto

17/12/2014

Marisiana, bom dia.
Bom já deu certo com o que você tinha dito antes e com o reforço do Lekão, fiz os testes aqui e me atendeu perfeitamente.
Quanto o between os mesmos não usam pois eles não pegam um intervalo e sim a data atual ou a data da frente para trás ou seja <=.
Quanto as regras de consultas foi bom você me informar, apesar de estar funcionando da forma que esta, porém realmente você tem razão o certo é tratar na cláusula Where.

Vou dar esse assunto como encerrado, como eu sou novo aqui eu tenho que fechar o assunto? Caso sim como faço?
GOSTEI 1
Marisiana Battistella

Marisiana Battistella

17/12/2014

Esses Subselect são desnecessários pois vc tá fazendo junções com as tabelas ped_itens e item c que são as referenciadas na consulta.
Utilizar Subselect, dessa forma que vc definiu, não é um boa prática de programação...
Veja um exemplo de como poderia ser construído o SELECT:

SELECT a.cod_empresa,
a.cod_item,
c.den_item,
c.den_item_reduz,
c.cod_unid_med,
sum(a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel) as saldo_pedidos, 
z.qtd_liberada as saldo_estoque,
( z.qtd_liberada - sum(a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel) as dif_receb,
CASE 
     WHEN b.cod_lin_recei = '0' THEN
          b.den_estr_linprod
      END  teste_a,
b.den_estr_linprod as teste_b
FROM ped_itens a
JOIN item c
ON(c.cod_empresa = a.cod_empresa)
AND(c.cod_item = a.cod_item)
JOIN estoque z
ON z.cod_empresa = a.cod_empresa
AND z.cod_item = a.cod_item
JOIN linha_prod b
ON b.cod_lin_prod = c.cod_lin_prod
AND b.cod_lin_recei = c.cod_lin_recei

WHERE (a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel) > '0'
AND(c.ies_situacao = 'A') 
AND(c.ies_tip_item = 'F') 
AND b.cod_seg_merc = '0'
AND a.prz_entrega BETWEEN '02/03/2014' AND '23/10/2014'

GROUP BY a.cod_empresa,
a.cod_item,
c.den_item,
c.den_item_reduz,
c.cod_unid_med,
teste_a,
teste_b


OBS.: Certamente terá erro na sintaxe, pois não testei, fiz a alteração pela lógica da estrutura apresentada e certamente precisa de correções.

Me desculpe se eu estiver sendo inconveniente por expor minha opinião.
Espero estar ajudando!
GOSTEI 1
Marisiana Battistella

Marisiana Battistella

17/12/2014

Marisiana, bom dia.
Bom já deu certo com o que você tinha dito antes e com o reforço do Lekão, fiz os testes aqui e me atendeu perfeitamente.
Quanto o between os mesmos não usam pois eles não pegam um intervalo e sim a data atual ou a data da frente para trás ou seja <=.
Quanto as regras de consultas foi bom você me informar, apesar de estar funcionando da forma que esta, porém realmente você tem razão o certo é tratar na cláusula Where.

Vou dar esse assunto como encerrado, como eu sou novo aqui eu tenho que fechar o assunto? Caso sim como faço?


Bom dia!
Como preferir Dagoberto!
Estava com a a página desatualizada e não vi tua resposta, por isso postei o ultimo comentário...
São os usuários moderadores e administradores que encerram os tópicos.
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Legal, nem sei como agradecer todos vocês, obrigado mesmo...
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

17/12/2014

Por nada Dagoberto!!
Se você optar por modificar o seu SELECT e adaptar a estrutura que postei como exemplo, posso te ajudar...
GOSTEI 0
Alex Lekao

Alex Lekao

17/12/2014

Disponha!!!

precisando de algo eh so falar.

Estamos sempre na area. rsrsr

eu menos que a maioria, mas to sempre por ai. rrsrsr

Abraco.
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Mais uma vez obrigado a todos, Marisiana, eu já tinha feito um select novo da forma que você me passou a única coisa que eu não tinha feito era usar o CASE, mas show de bola vou fazer essa adaptação ok.

OBRIGADO.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

17/12/2014

De nada! =)
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Pessoal boa tarde, voltei. Bom eu tinha dado essa duvida minha acima como encerrado, porém começou aparecer alguns probleminhas que fui vendo no dia a dia, por exemplo se eu tenho um pedido de um item com prazo de entrega para o dia 18, 19 e 30, e meu usuário quer saber quanto ele vai ter que produzir para atender o prazo de entrega do dia 19 para trás ignorando o do dia 30 ou seja vai ser feito a soma da necessidade do dia 18 e 19, usando a função max(prz_entrega) ele me traz o relatório em branco e não faz a soma, agora se eu coloco do dia 30 para traz ele faz a soma, dessa forma para mim não serve pois nem sempre pegamos a data limite do prazo de entrega as vezes atendemos as datas inferiores primeiro como poderia proceder ?
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

17/12/2014

Boa tarde!
Você está fazendo a consulta dentro de um período de prazos de entrega que é definido pelo usuário.
AND a.prz_entrega BETWEEN '02/03/2014' AND '23/10/2014'


Então,a regra é que o prazo final da pesquisa deverá ser a data final informada pelo usuário.
Se o usuário quiser saber os valores até o dia 19, a data final da pesquisa deverá ser o dia 19....
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Marisiana, obrigado pela atenção. Porém por estar trabalhando com a função max, se o usuário utilizar prz_entrega <= '19/01/2015' onde deveriam somar os pedidos do dia 19 para traz, ele não esta fazendo ou seja o relatorio vem em branco agora se eu utilizar prz_entrega <= '30/01/2015' ai ele soma o pedidos do dia 18, 19 e 30 perfeitamente.
GOSTEI 0
Alex Lekao

Alex Lekao

17/12/2014

Ola Dagoberto, bom dia!!

Rapaz eu nao entendi, os calculos que acontecem no select so sao executados depois da execucao do Where, nao teria porque fazer com 30 e nao fazer com 19, seria possivel vc postar parte do codigo novamente para entender melhor?

Nao sei se no MySQL eh assim, No SQL Server se tiver algum resultado Null que estiver sendo somando o resultado sempre sera Null, nesse caso temos que tratar o Null antes da soma, calculo, nao sei se eh o caso, mas, fica ai a sugestao.

Abraco.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

17/12/2014

Marisiana, obrigado pela atenção. Porém por estar trabalhando com a função max, se o usuário utilizar prz_entrega <= '19/01/2015' onde deveriam somar os pedidos do dia 19 para traz, ele não esta fazendo ou seja o relatorio vem em branco agora se eu utilizar prz_entrega <= '30/01/2015' ai ele soma o pedidos do dia 18, 19 e 30 perfeitamente.

Mas por que você está trabalhando com a função MAX se vc está filtrando por periodo?
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Lekão, obrigado pela atenção, postarei o código para sua analise.
Marisiana, usei a função max pois lembra no começo do post que eu não conseguia agrupar o mesmo código do item com datas diferentes do mesmo código para ser somado a soma.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

17/12/2014

Sim, lembro!
Mas se você fez o select semelhante ao exemplo q t passei não precisa utilizar a função MAX.
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Certo, mas no select que você fez você ignorou o campo prz_entrega no select e eu preciso desse campo pois ele é referencia para os usuários digitar a data que ele necessita, se ignorar o campo não tem como o usuário escolher a data, pois o usuário não tem acesso a query.
Para o usuário na hora de execução do relatorio aparece a janela prz_entrega para o mesmo digitar a data.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

17/12/2014

Eu não ignorei o campo prz_entrega, ele sendo utilizado como filtro na cláusula WHERE
AND a.prz_entrega BETWEEN '02/03/2014' AND '23/10/2014'
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Então esse é o problema eu não posso colocar esse filtro na query, pois o usuário não vai usar a query e sim o campo prz_entrega no relatorio, depois vou postar certinho com imagens para vocês entenderem melhor como funciona, pois eu crio a query, jogo no ireport construo o relatorio, pego o arquivo fisico criado pelo ireport e publico em um sistema WEB, esse sistema web me pergunta quais os campos que o usuário vai precisar ai eu coloco o prz_entrega, ai quando o usuário executo esse relatorio no sistema web abre o campo prz_entrega para a data ser digitada a gosto dele entendeu, se eu não colocar o prz_entrega no select não vou ter essa opção entendeu?
GOSTEI 0
Alex Lekao

Alex Lekao

17/12/2014

Oi bom dia!!!

Deixa eu ver se entendi, vc usa o campo prz_entrega para ser apresentado em um relatorio externo, por isso vc precisa que ele apareca na selecao, certo?
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Correto Lekão, é isso mesmo não posso tirar ele, pois o mesmo é referencia e vai ser utilizado.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

17/12/2014

Eu acho que eu entendi... De qualquer forma vc precisa filtrar pelo prazo de entrega...
Posta o SQL q vc esta utilizando para fazer a consulta, para facilitar a compreensão.
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Segue SQL, lembrando que preciso do campo prz_entrega no select pois o usuário utiliza para realizar os filtros das datas e ao mesmo tempo preciso somar quantidade dos pedidos dos itens e caso eu tenho itens iguais com prazo de entrega diferente que ele some exemplo:

item 1090, quantidade 5, prz_entrega 15/01/2015
item 1090, quantidade 3, prz_entrega 18/01/2015
item 1090, quantidade 1, prz_entrega 20/01/2015

Se o usuario filtrar prz_entrega <= '15/01/2015' ira mostrar:
item 1090, quantidade 5, prz_entrega 15/01/2015

Se o usuario filtrar prz_entrega <= '18/01/2015' ira mostrar:
item 1090, quantidade 8, prz_entrega 15/01/2015

Se o usuario filtrar prz_entrega <= '20/01/2015' ira mostrar:
item 1090, quantidade 9, prz_entrega 15/01/2015



SELECT
a.cod_empresa
,a.cod_item
,c.den_item
,c.den_item_reduz
,c.cod_unid_med
,a.prz_entrega
,sum(a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel)saldo_pedidos
,d.qtd_liberada AS saldo_estoque
,d.qtd_liberada - sum(a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel) dif_receb
,(SELECT b.den_estr_linprod FROM linha_prod b WHERE b.cod_lin_prod = c.cod_lin_prod AND b.cod_lin_recei = '0' AND b.cod_seg_merc = '0')teste_a
,(SELECT b.den_estr_linprod FROM linha_prod b WHERE b.cod_lin_prod = c.cod_lin_prod AND b.cod_lin_recei = c.cod_lin_recei AND b.cod_seg_merc = '0')teste_b

FROM ped_itens a

JOIN item c
ON(c.cod_empresa = a.cod_empresa)
AND(c.cod_item = a.cod_item)

JOIN estoque d
ON(d.cod_empresa = a.cod_empresa)
AND(d.cod_item = a.cod_item)



WHERE a.cod_empresa = '02'
AND (a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel) > '0'
AND c.ies_situacao = 'A'
AND c.ies_tip_item = 'F'



GROUP BY
a.cod_empresa
,a.cod_item
,c.den_item
,c.den_item_reduz
,c.cod_unid_med
,a.prz_entrega
,saldo_estoque
,teste_a
,teste_b
order by den_item_reduz, teste_b
GOSTEI 0
Alex Lekao

Alex Lekao

17/12/2014

Entao vamos la.

Se vc utilizar o Prz_Entrega no filtro(where), como a Marisiana esta sugerindo, a consulta com MAX(Prz_Entrega) na selecao aparecera somente aquilo que estiver no filtro, ou seja, se vc filtrar ate dia 30, o Prz_Entrega que for maior sera do dia 30, se filtrar ate o dia 19, o maior sera do dia 19, eh claro que para aqueles itens que tiverem as previsoes para essas datas.

Acredito que teria que funcionar, o problema no meu caso eh que nao conheco a estrutura do MySQL para tratar algumas informacoes.

Me lembro de algumas instrucoes que usava no SQL Server sem problemas, sem funcoes especificas SQL Server, nao funcionaram da mesma forma no MySQL, nao sei se seria esse o caso, o problema que tive foi justamente com soma e agrupamento.
GOSTEI 0
Isaac Jose

Isaac Jose

17/12/2014

desculpem - me cheguei agora e so li o ultimo post rsrs

mais pelo que vi vc quer trazer sempre o min de prazo de entrega joga um select min desse cara no where.
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Então Lekão, não funciona com 'MAX', pois no exemplo acima dos itens que te dei se eu usar o max e ele agrupar o item ele vai entender sempre que o prz_entrega maior é o do dia 30 pelo fato de estar usando o MAX ou seja se eu filtrar do dia 18 para trás o relatório vem em branco pois ele transforma os 3 em uma única data ou seja a maior entendeu?

Isaac, não quero usar o mínimo não quero ter praticidade em usar as datas conforme a necessidade, vc citou algo para fazer após o where o que seria ???
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

17/12/2014

Crie a possibilidade para q o usuário informe qual é a data limite a ser considerada. Inclua na cláusula WHERE:
AND a.prz_entrega <= v_datalimite

Assim, no caso q estamos comentando, se o usuário quiser saber os valores até o prazo de entrega 19 ele deve informa uma data que seja menor q 30.
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Então, mas ele faz isso, porém não na query e sim no programa via web onde eu publico os relatórios. So para vc entender eu extraio as informações do banco de dados jogo no ireport onde gera um arquivo(relatorio) esse arquivo eu jogo em um ambiente WEB e quando o usuário executa o relatorio aparece o campo prz_entrega para ele colocar a data entendeu. Se vc ler o post um pouco mais para cima vc vai entender melhor ...
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

17/12/2014

Entendi...
Mas vc precisa fazer isso na consulta e não no ambiente WEB, porque se não fizer isso na consulta, os resultados nunca vão retornar corretamente, a consulta, tem q mostrar exatamente a informação que vc precisa listar no relatório.

Essa data que o usuário digita é a data que vc tem que passar como parâmetro para a consulta em
AND a.prz_entrega <= v_datalimite
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Não consegui compreender muito bem. da onde tirou v_datalimite tenho que colocar uma data no lugar desse v_datalimite ?
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Na verdade eu compreendi, mas o usuário não pode ter acesso a query. depois vou postar certinho tudo ai vão entender melhor...
GOSTEI 0
Isaac Jose

Isaac Jose

17/12/2014

Não consegui compreender muito bem. da onde tirou v_datalimite tenho que colocar uma data no lugar desse v_datalimite ?




o dado que o usuario quer ver nao vai ser o parametro para compraração? vc pega esse cara faz o criterio que a marisiana mandou e na hora de mostrar o menor prazo
vc joga ele como o menor dessa seleção where pzr_a_ser_visualizado = (select min(prz_entrega)Menor_prz_entrega from table
where aqui vc joga a condição que chega ao resultado do que vc postou como exemplo )
item 1090, quantidade 5, prz_entrega 15/01/2015
item 1090, quantidade 3, prz_entrega 18/01/2015
item 1090, quantidade 1, prz_entrega 20/01/2015

Se o usuario filtrar prz_entrega <= '15/01/2015' ira mostrar:
item 1090, quantidade 5, prz_entrega 15/01/2015

Se o usuario filtrar prz_entrega <= '18/01/2015' ira mostrar:
item 1090, quantidade 8, prz_entrega 15/01/2015

Se o usuario filtrar prz_entrega <= '20/01/2015' ira mostrar:
item 1090, quantidade 9, prz_entrega 15/01/2015



qualquer coisa envia um script com umas table de exemplo e alguns inserts.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

17/12/2014

Não consegui compreender muito bem. da onde tirou v_datalimite tenho que colocar uma data no lugar desse v_datalimite ?

Se o usuário digita a data 19/01/2015, vc precisa q a consulta retorne os pedidos que possui o prazo de entrega nesta data, certo?
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Exatamente.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

17/12/2014

Então, você não precisa utilizar a função MAX...
Você precisa passar a data que o usuário informar como parâmetro para o teu SQL. Essa data será recebida como parâmetro pela variável v_datalimite (ou qualquer outro nome q vc definir).
Aconselho a criar uma procedure que receba essa data como parâmetro, execute a consulta e retorne os dados da consulta.

Na tela, no ambiente WEB, ao invés do usuário digitar a data, você pode colocar um campo de seleção com as datas que já estão armazenadas na tabela (campo prz_entrega). Assim, o usuário vai ver quais são os dias q ele tem pedidos com prazo a cumprir e vai selecionar a data q ele quiser para visualizar os pedidos.
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Bom dia à todos, entendi perfeitamente Marisiana, mas como eu tenho um conhecimento básico em SQL e estou começando neste mundo agora rs, nem faço ideia de como montar uma procedure e também de como criar um parâmetro.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

17/12/2014

Bom dia!
Nesse caso, te aconselho a aprender a utilizar, são vc vai dar uma volta enorme para fazer uma funcionalidade q pode ser simples de criar.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

17/12/2014

Encontrei dois artigos sobre o assunto:
Stored Procedures no MySQL

Procedures e funções no MySQL
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Pessoal to apanhando em aprender Stored Procedures e funções porém é apanhando que se aprende, gostaria de saber se a unica forma de fazer o que eu gostaria seria apenas com Stored Procedure e funções caso sim vou dar a pergunta como encerrada, ou até mesmo uma ajuda para montar uma luz rs.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

17/12/2014

É melhor fazer utilizando um procedimento...
Vou t passar um exemplo, assim q eu conseguir sobrar um tempinho aqui...
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Marisiana, boa noite.
OK e muito obrigado pela ajuda sem vcs aqui do grupo eu estaria perdidinho aqui RS.
GOSTEI 0
Alex Lekao

Alex Lekao

17/12/2014

Blz.

Cara, eu ainda acho que esta havendo um pouco de desentendimento, mas manda brasa, conhecimento nao ocupa espaco. rsrsr

Se vc quise, tem meu contato, skype, no forum e pode me adicionar que ajudo mais efetivamente, acredito. rsrsr

Abraco.
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Bom dia Lekão, realmente aprendizado nunca é demais... Cara seria muito bom o Skype, porém não achei no forum, se puder me passar ficaria grato.
GOSTEI 0
Alex Lekao

Alex Lekao

17/12/2014

esse eh o meu e-mail e contato do skype alex_linhares_es@yahoo.com.br
GOSTEI 0
Dagoberto Neto

Dagoberto Neto

17/12/2014

Ok, vou adicionar, para quem quiser me adicionar só procurar como netoti
GOSTEI 0
Alex Lekao

Alex Lekao

17/12/2014

fmz.

ja aceitei. rsrr
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

17/12/2014

Conseguiu resolver Neto?
GOSTEI 0
POSTAR