Ir para conteúdo
Fórum Script Brasil
  • 0

Consulta Agrupando Dia do intervalo da consulta!


reunix

Pergunta

Olá pessoal, estou com dificuldades para resolver este problema, já procurei pela net mas não encontrei nada que ajudasse, segue...

tenho esta consulta:

SELECT b.nome,SUM(valor) AS valor,to_char(a.vencto,'dd/mm/yyyy') 
FROM ctreceber a
left join categfinanc b on a.categoria = b.id
WHERE (cast(a.vencto as date) >= '28/08/2010' AND 
cast(a.vencto as date) <= '11/09/2010') AND 
(a.dtrec is null) 
GROUP BY a.vencto,b.nome
order by a.vencto,b.nome
que retornar: categoria valor data -------------------------------------------------- ATENDIMENTOS 0,33 30/08/2010 ATENDIMENTOS 84,33 31/08/2010 ATENDIMENTOS 33,33 04/09/2010 gostaria de agrupar por categoria + dia e mes no mesmo registro: vou dá um exemplo com o resultado da consulta acima: seria: categoria dia30AGO dia31AGO dia04SET ------------------------------------------------------------------------- ATENDIMENTOS 0,33 84,33 33,33 invés de retornar 3 registros 1 para cada DATA, seria 1 registro acumulando cada dia ou data. deu pra entender né?? já fiz uma pesquisa parecida com os meses do ano, que foi facil porque os meses são fixo daí fiz com o EXTRACT YAR e MONTH, segue um pedaço do código para os meses do ano
categfinanc.Sql.Add('Select');
    categfinanc.Sql.Add('A.id,');
    categfinanc.Sql.Add('A.nome,');
    categfinanc.Sql.Add('TabPagoJan.PagoJan ,');
    categfinanc.Sql.Add('TabPagoFev.PagoFev ,');
    categfinanc.Sql.Add('TabPagoMar.PagoMar ,');
    categfinanc.Sql.Add('TabPagoAbr.PagoAbr ,');
    categfinanc.Sql.Add('TabPagoMai.PagoMai ,');
    categfinanc.Sql.Add('TabPagoJun.PagoJun ,');
    categfinanc.Sql.Add('TabPagoJul.Pagojul ,');
    categfinanc.Sql.Add('TabPagoAgo.PagoAgo ,');
    categfinanc.Sql.Add('TabPagoSet.PagoSet ,');
    categfinanc.Sql.Add('TabPagoOut.Pagoout ,');
    categfinanc.Sql.Add('TabPagoNov.Pagonov ,');
    categfinanc.Sql.Add('TabPagoDez.PagoDez ,');
    categfinanc.Sql.Add('TabRecJan.RecJan   ,');
    categfinanc.Sql.Add('TabRecFev.RecFev   ,');
    categfinanc.Sql.Add('TabRecMar.RecMar   ,');
    categfinanc.Sql.Add('TabRecAbr.RecAbr   ,');
    categfinanc.Sql.Add('TabRecMai.RecMai   ,');
    categfinanc.Sql.Add('TabRecJun.Recjun   ,');
    categfinanc.Sql.Add('TabRecJul.Recjul   ,');
    categfinanc.Sql.Add('TabRecAgo.RecAgo   ,');
    categfinanc.Sql.Add('TabRecSet.Recset   ,');
    categfinanc.Sql.Add('TabRecOut.Recout   ,');
    categfinanc.Sql.Add('TabRecNov.Recnov   ,');
    categfinanc.Sql.Add('TabRecDez.RecDez   ');
    categfinanc.Sql.Add('FROM categfinanc a');

    // pagos Janeiro
    categfinanc.sql.add('LEFT JOIN (SELECT Round(CAST(SUM(valorpago) AS NUMERIC),2) AS PagoJan  ,categoria FROM contasPagar');
    categfinanc.sql.add('WHERE (CATEGORIA = :pCateg OR :pCateg = 0) ');
    categfinanc.sql.add('AND (COALESCE(valorpago,0) <> 0)');
    categfinanc.sql.add('AND (Extract(YEAR  FROM datapagto) = :pAnoPg) ');
    categfinanc.sql.add('AND (Extract(MONTH FROM datapagto) = :pPgJan) ');
    categfinanc.sql.add('GROUP BY categoria) TabPagoJan ON A.id = TabPagoJan.categoria');

    // pagos Fevereiro
    categfinanc.sql.add('LEFT JOIN (SELECT Round(CAST(SUM(valorpago) AS NUMERIC),2)   AS PagoFev ,categoria FROM contasPagar');
    categfinanc.sql.add('WHERE (CATEGORIA = :pCateg OR :pCateg = 0) ');
    categfinanc.sql.add('AND (COALESCE(valorpago,0) <> 0)  ');
    categfinanc.sql.add('AND (Extract(YEAR  from datapagto) = :pAnoPg) ');
    categfinanc.sql.add('AND (Extract(Month from datapagto) = :pPgFev) ');
    categfinanc.sql.add('GROUP BY categoria) TabPagoFev ON A.id = TabPagoFev.categoria');

 // pagos Março
    categfinanc.sql.add('LEFT JOIN (SELECT Round(CAST(SUM(valorpago) AS NUMERIC),2)   AS PagoMar ,categoria FROM contasPagar');
    categfinanc.sql.add('WHERE (CATEGORIA = :pCateg OR :pCateg = 0) ');
    categfinanc.sql.add('AND (COALESCE(valorpago,0) <> 0)  ');
    categfinanc.sql.add('AND (Extract(YEAR  from datapagto) = :pAnoPg) ');
    categfinanc.sql.add('AND (Extract(Month from datapagto) = :pPgMar) ');
    categfinanc.sql.add('GROUP BY categoria) TabPagoMar ON A.id = TabPagoMar.categoria');

   ...  SEGUE PARA TODOS OS MESES....

funcinou que foi uma beleza, mas para o problema acima citado não consegui resover.

alguém tem uma solução legal para resolver esse problema??

agradeço desde já

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Tente assim:

SELECT b.nome,
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-28' THEN valor END) as "28/08/2010",
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-29' THEN valor END) as "29/08/2010"
FROM ctreceber a
left join categfinanc b on a.categoria = b.id
WHERE (a.dtrec is null)
GROUP BY a.vencto,b.nome
order by a.vencto,b.nome

Link para o comentário
Compartilhar em outros sites

  • 0
Tente assim:

SELECT b.nome,
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-28' THEN valor END) as "28/08/2010",
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-29' THEN valor END) as "29/08/2010"
FROM ctreceber a
left join categfinanc b on a.categoria = b.id
WHERE (a.dtrec is null)
GROUP BY a.vencto,b.nome
order by a.vencto,b.nome
Olá Kakao primeiramente obrigado, acredito que foi por pouco veio a categoria e 2 campos já como data dia 28 e 29 so que vazio, assim: NOME 28/08/2010 29/08/2010 CARCT (MONEY) (MONEY) ------------------ ---------- -------- "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; esse intervalo será informado pelo sistema em php, o cliente informará a data inicial e eu vou calcular a data final com 15 dias ou seja se o cliente informar '28/08/2010' a data final será '11/09/2010' então como poderia renomear o nome do campo automaticamente com o AS? ainda não entendi muito bem o seu script mas acredito que seja por ai, estou te passando o resulta, mas vou dá uma estudada aqui, se puder rever pra também já agradeço seria o ideal se o nome dos campos fosse já com a data como você fez com o AS para renomear, porém o cliente pode escolher qualquer intervalo até mesmo uma virada de mês como no exemplo que mencionei a pouco, no caso do seu resultado não deveria retornar vários "ATENDIMENTOS" seria 1 "ATENDIMENTOS" e vários campos do SUM() caso tivesse valor na data do período, vou estudar teu código aqui, mas se puder ainda me ajudar, agradeço d+ at+ então. kakao, voltei... fiz esta modificação
SELECT b.nome,
    SUM(CASE WHEN date_trunc('day', a.vencto) >= '2010-08-28' THEN valor END) as "28/08/2010",
    SUM(CASE WHEN date_trunc('day', a.vencto) <= '2010-09-11' THEN valor END) as "29/08/2010"
FROM ctreceber a
left join categfinanc b on a.categoria = b.id
WHERE (a.dtrec is null)
GROUP BY a.vencto,b.nome
order by a.vencto,b.nome

coloquei >= e <= para um período e como disse ele não gerou os campo do SUM() para todas as datas do período ou seja

28/08/2010 - 29/08/2010 - 30/08/2010 ... 10/09/2010 - 11/09/2010

deveria ser assim

CATEDOGIRA................ 28/08/2010 - 29/08/2010 - 30/08/2010 ... 10/09/2010 - 11/09/2010

ATENDIMENTOS ................. 9,99 ......... 3,70 ................ 0............... 5,70.......... 10,80

CONTAS DIVERSAS ........... 11,00 ........74,40 ..........100,00............... 75,00 .......... 10,00

TELEMAR ............ 150,00 .........74,00

...

at+

Editado por reunix
Link para o comentário
Compartilhar em outros sites

  • 0

Opa, dei uma bobeada. Faz assim:

SELECT b.nome,
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-28' THEN valor END) as "28/08/2010",
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-29' THEN valor END) as "29/08/2010"
FROM ctreceber a
left join categfinanc b on a.categoria = b.id
WHERE (a.dtrec is null)
GROUP BY b.nome
order by b.nome

Para gerar para todos os dias do intervalo o único jeito é criar a consulta dinamicamente. Amanhã eu posto um exemplo. Que linguagem é essa? C#? Java?

Link para o comentário
Compartilhar em outros sites

  • 0

kakao você é o kara, v mesmo, mexendo aqui tive a idéia,

no propriprio PHP posso montar a consulta com um simples while no intervalo das datas,

exemplo,

dataconsulta = dataINI;

sql = "SELECT b.nome,";


faça enquanto dataINi  <= DataFIM {

   sql = sql + "SUM(CASE WHEN date_trunc('day', a.vencto) = 'dataconsulta' THEN valor END) as 'dataconsulta',"

  dataconsulta = dataconsulta +1dia;

}

 sql = sql + " FROM ctreceber a
  left join categfinanc b on a.categoria = b.id
  WHERE (a.dtrec is null)
  GROUP BY a.vencto,b.nome
  order by a.vencto,b.nome"
no final do while ficaria +- assim...
SELECT b.nome,
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-28' THEN valor END) as "28/08/2010",
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-29' THEN valor END) as "29/08/2010",
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-30' THEN valor END) as "30/08/2010",
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-31' THEN valor END) as "31/08/2010",    
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-09-04' THEN valor END) as "04/09/2010"
    
FROM ctreceber a
left join categfinanc b on a.categoria = b.id
WHERE (a.dtrec is null)
GROUP BY a.vencto,b.nome
order by a.vencto,b.nome
ainda não testei pelo PHP mas deve funcionaar, beleza é quase isso... testei direto no banco dessa forma que está ai em cima, e retornou 15 registro da mesma categoria "ATENDIMENTOS",
NOME;28/08/2010;29/08/2010;30/08/2010;31/08..;04/09/2010 
"ATENDIMENTOS";;;R$0,33;;
"ATENDIMENTOS";;;;R$84,33;
"ATENDIMENTOS";;;;;R$33,33
"ATENDIMENTOS";;;;;
"ATENDIMENTOS";;;;;
"ATENDIMENTOS";;;;;
"ATENDIMENTOS";;;;;
"ATENDIMENTOS";;;;;
"ATENDIMENTOS";;;;;
"ATENDIMENTOS";;;;;
"ATENDIMENTOS";;;;;
"ATENDIMENTOS";;;;;
"ATENDIMENTOS";;;;;
tenho uma outra consulta aqui que retorna também os 15r registros só para comparar,
Select  A.nome,  TabDiaUm.DiaUm as valor,
to_char(TabDiaUm.vencto,'dd/mm/yyyy') FROM categfinanc a
LEFT JOIN (SELECT SUM(valor) AS DiaUm,categoria,vencto 
FROM ctreceber
WHERE (CAST(vencto as date) >= '01/01/2010' AND 
CAST(vencto as date) <= '31/12/2010')
AND (dtrec is null) GROUP BY vencto,categoria) 
TabDiaUm ON A.id = TabDiaUm.categoria
where TabDiaUm.DiaUm <> '0'
order by a.nome,vencto
e retornou isso:
"ATENDIMENTOS";R$33,33;"02/08/2010"
"ATENDIMENTOS";R$4,33;"22/08/2010"
"ATENDIMENTOS";R$0,33;"30/08/2010"
"ATENDIMENTOS";R$84,33;"31/08/2010"
"ATENDIMENTOS";R$33,33;"04/09/2010"
"ATENDIMENTOS";R$166,67;"17/09/2010"
"ATENDIMENTOS";R$3,33;"18/09/2010"
"ATENDIMENTOS";R$4,33;"21/09/2010"
"ATENDIMENTOS";R$84,66;"30/09/2010"
"ATENDIMENTOS";R$33,33;"01/10/2010"
"ATENDIMENTOS";R$33,33;"04/10/2010"
"ATENDIMENTOS";R$3,33;"18/10/2010"
"ATENDIMENTOS";R$4,33;"21/10/2010"
"ATENDIMENTOS";R$166,67;"16/11/2010"
"ATENDIMENTOS";R$3,33;"17/11/2010"
espero não está complicando ainda mais :D at+ vou fazer uns teste aqui, qualquer coisa volto aqui, se você tiver algo agradeço... at++
Opa, dei uma bobeada. Faz assim:
SELECT b.nome,
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-28' THEN valor END) as "28/08/2010",
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-29' THEN valor END) as "29/08/2010"
FROM ctreceber a
left join categfinanc b on a.categoria = b.id
WHERE (a.dtrec is null)
GROUP BY b.nome
order by b.nome
Para gerar para todos os dias do intervalo o único jeito é criar a consulta dinamicamente. Amanhã eu posto um exemplo. Que linguagem é essa? C#? Java?
é isso.... , o problema agora é a repeticao da categoria em branco, agradeço muito ajudou d+ é PHP
kakao você é o kara, v mesmo, mexendo aqui tive a idéia, no propriprio PHP posso montar a consulta com um simples while no intervalo das datas, exemplo,
dataconsulta = dataINI;

sql = "SELECT b.nome,";


faça enquanto dataINi  <= DataFIM {

   sql = sql + "SUM(CASE WHEN date_trunc('day', a.vencto) = 'dataconsulta' THEN valor END) as 'dataconsulta',"

  dataconsulta = dataconsulta +1dia;

}

 sql = sql + " FROM ctreceber a
  left join categfinanc b on a.categoria = b.id
  WHERE (a.dtrec is null)
  GROUP BY a.vencto,b.nome
  order by a.vencto,b.nome"
no final do while ficaria +- assim...
SELECT b.nome,
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-28' THEN valor END) as "28/08/2010",
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-29' THEN valor END) as "29/08/2010",
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-30' THEN valor END) as "30/08/2010",
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-31' THEN valor END) as "31/08/2010",    
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-09-04' THEN valor END) as "04/09/2010"
    
FROM ctreceber a
left join categfinanc b on a.categoria = b.id
WHERE (a.dtrec is null)
GROUP BY a.vencto,b.nome
order by a.vencto,b.nome
ainda não testei pelo PHP mas deve funcionaar, beleza é quase isso... testei direto no banco dessa forma que está ai em cima, e retornou 15 registro da mesma categoria "ATENDIMENTOS",
NOME;28/08/2010;29/08/2010;30/08/2010;31/08..;04/09/2010 
"ATENDIMENTOS";;;R$0,33;;
"ATENDIMENTOS";;;;R$84,33;
"ATENDIMENTOS";;;;;R$33,33
"ATENDIMENTOS";;;;;
"ATENDIMENTOS";;;;;
"ATENDIMENTOS";;;;;
"ATENDIMENTOS";;;;;
"ATENDIMENTOS";;;;;
"ATENDIMENTOS";;;;;
"ATENDIMENTOS";;;;;
"ATENDIMENTOS";;;;;
"ATENDIMENTOS";;;;;
"ATENDIMENTOS";;;;;
tenho uma outra consulta aqui que retorna também os 15r registros só para comparar,
Select  A.nome,  TabDiaUm.DiaUm as valor,
to_char(TabDiaUm.vencto,'dd/mm/yyyy') FROM categfinanc a
LEFT JOIN (SELECT SUM(valor) AS DiaUm,categoria,vencto 
FROM ctreceber
WHERE (CAST(vencto as date) >= '01/01/2010' AND 
CAST(vencto as date) <= '31/12/2010')
AND (dtrec is null) GROUP BY vencto,categoria) 
TabDiaUm ON A.id = TabDiaUm.categoria
where TabDiaUm.DiaUm <> '0'
order by a.nome,vencto
e retornou isso:
"ATENDIMENTOS";R$33,33;"02/08/2010"
"ATENDIMENTOS";R$4,33;"22/08/2010"
"ATENDIMENTOS";R$0,33;"30/08/2010"
"ATENDIMENTOS";R$84,33;"31/08/2010"
"ATENDIMENTOS";R$33,33;"04/09/2010"
"ATENDIMENTOS";R$166,67;"17/09/2010"
"ATENDIMENTOS";R$3,33;"18/09/2010"
"ATENDIMENTOS";R$4,33;"21/09/2010"
"ATENDIMENTOS";R$84,66;"30/09/2010"
"ATENDIMENTOS";R$33,33;"01/10/2010"
"ATENDIMENTOS";R$33,33;"04/10/2010"
"ATENDIMENTOS";R$3,33;"18/10/2010"
"ATENDIMENTOS";R$4,33;"21/10/2010"
"ATENDIMENTOS";R$166,67;"16/11/2010"
"ATENDIMENTOS";R$3,33;"17/11/2010"
espero não está complicando ainda mais :D at+ vou fazer uns teste aqui, qualquer coisa volto aqui, se você tiver algo agradeço... at++
Opa, dei uma bobeada. Faz assim:
SELECT b.nome,
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-28' THEN valor END) as "28/08/2010",
    SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-29' THEN valor END) as "29/08/2010"
FROM ctreceber a
left join categfinanc b on a.categoria = b.id
WHERE (a.dtrec is null)
GROUP BY b.nome
order by b.nome

Para gerar para todos os dias do intervalo o único jeito é criar a consulta dinamicamente. Amanhã eu posto um exemplo. Que linguagem é essa? C#? Java?

é isso.... , o problema agora é a repeticao da categoria em branco,

agradeço muito ajudou d+ é PHP

beleza RESOLVIDO!!!! :D

com seu último POst o filtro funcionou uma beleza...

OBRIGADO!

kakao!!

tu é fera!!!!

at+

como faço para finalizar o tópico??

valeu

at9

Massa mesmo, vou mexendo e vai clareando

valeu mesmo!!!!

Editado por reunix
Link para o comentário
Compartilhar em outros sites

  • 0

Eis o resultado kakao,

$data2 = substr($cDataFIM,6,4).substr($cDataFIM,3,2).substr($cDataFIM,0,2);
  $data1 = substr($cDataINI,6,4).substr($cDataINI,3,2).substr($cDataINI,0,2);
    
  $sql = "SELECT b.nome, ";
  $datafiltro = substr($cDataINI,6,4).'-'.substr($cDataINI,3,2).'-'.substr($cDataINI,0,2);
    
  while ($data1 < $data2) { 
     $data1 = substr($cDataINI,6,4).substr($cDataINI,3,2).substr($cDataINI,0,2);

     $sql .= "SUM(CASE WHEN date_trunc('day', a.vencto) = '$datafiltro' THEN valor END) as \"".substr($cDataINI,0,2)."-".substr($cDataINI,3,2)."\",";

     $cDataINI = date('d/m/Y',mktime(24*1, 0, 0, substr($cDataINI,3,2), substr($cDataINI,0,2), substr($cDataINI,6,4)));

     $datafiltro = substr($cDataINI,6,4).'-'.substr($cDataINI,3,2).'-'.substr($cDataINI,0,2);            
        
  } 
    
   // RETIRO A ULTIMA VIRGULA!!!    
   $sql = substr($sql,0,strlen($sql)-1);
    
   $sql .=  " FROM ctreceber a
                 left join categfinanc b on a.categoria = b.id WHERE (a.dtrec is null)  GROUP BY b.nome  order by b.nome";
resultado:
SELECT b.nome, SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-13' THEN valor END) as "13-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-14' THEN valor END) as "14-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-15' THEN valor END) as "15-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-16' THEN valor END) as "16-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-17' THEN valor END) as "17-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-18' THEN valor END) as "18-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-19' THEN valor END) as "19-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-20' THEN valor END) as "20-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-21' THEN valor END) as "21-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-22' THEN valor END) as "22-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-23' THEN valor END) as "23-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-24' THEN valor END) as "24-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-25' THEN valor END) as "25-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-26' THEN valor END) as "26-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-27' THEN valor END) as "27-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-28' THEN valor END) as "28-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-29' THEN valor END) as "29-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-30' THEN valor END) as "30-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-31' THEN valor END) as "31-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-09-01' THEN valor END) as "01-09",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-09-02' THEN valor END) as "02-09" FROM ctreceber a left join categfinanc b on a.categoria = b.id WHERE (a.dtrec is null) GROUP BY b.nome order by b.nome

está perfeita a consulta, mais uma vez obrigado!!!!!

at+

Link para o comentário
Compartilhar em outros sites

  • 0

Legal que você resolveu. Eu ia sugerir mesmo o while para montar a consulta.

Lembrando que a mesma lógica pode ser usada para o mês trocando o 'day' por 'month' e usando a string sempre com o dia primeiro:

...
    SUM(CASE WHEN date_trunc('month', a.vencto) = '2010-08-01' THEN valor END) as "08-2010",
    SUM(CASE WHEN date_trunc('month', a.vencto) = '2010-09-01' THEN valor END) as "09-2010"
...

Link para o comentário
Compartilhar em outros sites

  • 0
Legal que você resolveu. Eu ia sugerir mesmo o while para montar a consulta.

Lembrando que a mesma lógica pode ser usada para o mês trocando o 'day' por 'month' e usando a string sempre com o dia primeiro:

...
    SUM(CASE WHEN date_trunc('month', a.vencto) = '2010-08-01' THEN valor END) as "08-2010",
    SUM(CASE WHEN date_trunc('month', a.vencto) = '2010-09-01' THEN valor END) as "09-2010"
...

OK Kakao obrigado, mas você já pensou q no caso do (trunc day) para pedir um intervalo de até um mês funciona numa boa

ainda não testei mas se por acaso o cliente pedir um intervalo de 1 mes e 15dias por exemplo alguns dias vão se repedir,

o date_trunc('day'... percebe que os dias iguais são de outro mês e ano?

ainda não testei essa possibilidade, até porque para mim não ocorreria porque eu forço somente 15 dias.

at+

Link para o comentário
Compartilhar em outros sites

  • 0
Quando você trunca uma data para o dia mantem o ano e o mes tirando as horas, minutos e segundos. É como se fosse um arredondamento.

Assim trunc('day', '2010-08-10 22:11:33') fica '2010-08-10'.

Acho q entendi, então o trunc day concidera a data inteira e não somente o dia!!!:?

valeu!!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...