Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom Dia pessoal, alguem pode me ajudar a resovler essa query, é o seguinte preciso trazer uma coluna com mes e ano e outra com um count de algumas coisas no banco o relatorio final ficaria mais ou menos assim
COLUNA1 COLUNA2 COLUNA3
JANEIRO/2015 COUNT() de usuario de JAN COUNT de usuario de JAN FEVEREIRO/2015 COUNT() de usuario de FEV COUNT de usuario de FEV
MARÇO/2015 COUNT() de usuario de MAR COUNT de usuario de MAR
Até o mês corrente sem colocar um between de data, por exemplo se virar o mês pra novembro ele já me traz novembro, fiz a query abaixo porem tem que colcoar um between
Select to_char(add_months(trunc( TO_DATE('01/2015','MM/YYYY') ,'mm'),rownum-1),'Month') mês, to_char(add_months(trunc( TO_DATE('01/2015','MM/YYYY') ,'mm'),rownum-1),'yyyy') ano from user_tables where rownum <= months_between ( to_date('12/2015','mm/yyyy'), to_date('01/2015','mm/yyyy')) + 1 ;
gostaria que me retornasse automatico e na contagem já passasse a data do mes como por exemplo count(usuario) from blabla where data = 'DATA COLUNA'Nao Motta seguinte,
A consulta tem que trazer uma relatorio com a primeira coluna com mes e ano extenso , primeira coisa então
JANEIRO-2015
FEVEREIRO-2015
etc
Isso ja consegui na query abaixo ..
SELECT TO_CHAR(add_months(TRUNC( TO_DATE('01/2015','MM/YYYY') ,'mm'),rownum-1),'Month') mês,
TO_CHAR(add_months(TRUNC( TO_DATE('01/2015','MM/YYYY') ,'mm'),rownum -1),'yyyy') ano
FROM user_tables
WHERE rownum <= months_between ( SYSDATE, to_date('01/2015','mm/yyyy')) + 1 ;
Agora tenho uma coluna que esta formatada dessa forma e eu teria que adptar as subconsultas para pegar a data em questão da primeira query para trazer o count do mes em questão a query está abaixo.
select COUNT(*)
from tabela."sel_eco"
inner join tabela.tblecotrb tr on tr.insmun = "eco_inscricao"
inner join cliente1.credenciamento cr
on cr.insmun= tr.insmun
where trim("eco_situacaoEmpresa") in (
SELECT trim(regexp_replace(ativo, '['']', '')) AS semaspas from (
select regexp_substr((select "cfg_sitativas" from tabela."config" where "cfg_codcid"='7145'),'[^,]+', 1, level) as ativo from dual connect by regexp_substr((select "cfg_sitativas" from tabela."config" where "cfg_codcid"='7145'), '[^,]+', 1, level) is not null
)
)MOTTA É ISSO AQUI
POREM NA SUBQUERY NAO ESTOU CONSEGUINDO PEGAR DO MES EM QUESTÃO A SUBQUERY NAO ENTENDE O FORMATO , A data_formatada_1 JÁ ESTA FORMATADA DA MENIERA QUE A COLUNA ESPERA.
OUTRA COISA ESSA COLUNA MESREFINI É DATE
COLOQUEI ASSIM AND tr.MESREFINI >= TO_DATE('01/07/15','DD/MM/YY') E NAO FUNCIONOU NAO ME RETORNA OS REGISTROS
E NEM ASSIM
AND tr.MESREFINI >= '01/07/15'
Qual o type de MESREFINI
O tipo é date
estou tentando essa query
O resultado é esse abixo, porém eu tenho um registro em março acho que naquela subquery o intervalo nao esta funcionando , estou tentando fazer automatico esse count pegando os meses já
Janeiro 2015 0
Fevereiro2015 0
Março 2015 0
Abril 2015 0
Maio 2015 0
Junho 2015 0
Julho 2015 0
Agosto 2015 0
Setembro 2015 0
Outubro 2015 0
Registro que contem a data
MESREFINI
000000000 31/12/69 01/03/15 0 7145
essa concatenação me retona as data que quero certinho
01'||'/'||TO_CHAR(add_months(TRUNC( TO_DATE('01/2015','MM/YYYY'),'mm'),rownum-1),'MM')||'/'||TO_CHAR(add_months(TRUNC(TO_DATE('01/2015','MM/YYYY') ,'mm'),rownum-1),'YY')
mas na subquery nao funciona
AND tr.MESREFINI >= TO_DATE('01'||'/'||TO_CHAR(add_months(TRUNC( TO_DATE('01/2015','MM/YYYY'),'mm'),rownum-1),'MM')||'/'||TO_CHAR(add_months(TRUNC(TO_DATE('01/2015','MM/YYYY') ,'mm'),rownum-1),'YY'),'dd/mm/yy')
AND tr.MESREFINI <= TO_DATE('31'||'/'||TO_CHAR(add_months(TRUNC( TO_DATE('01/2015','MM/YYYY'),'mm'),rownum-1),'MM')||'/'||TO_CHAR(add_months(TRUNC(TO_DATE('01/2015','MM/YYYY') ,'mm'),rownum-1),'YY'),'dd/mm/yy')
DO JEITO ABAIXO ME RETORNA TENTEI COLOCAR ASPAS SIMPLES E NAO RETORNA TAMBEM , TENTEI UM TRUNC 'MM' E TAMBEM NAO VAI
AND tr.MESREFINI >= TO_DATE('01/03/15','dd/mm/yy')
AND tr.MESREFINI <= TO_DATE('31/03/15','dd/mm/yy')
Vc tem datas que atendam a regra ?
A síntaxe me oarece certa.
Tenho sim MOTTA , o AND que nao funciona é esse
AND tr.MESREFINI >= TO_DATE('01'||'/'||TO_CHAR(add_months(TRUNC( TO_DATE('01/2015','MM/YYYY'),'mm'),rownum-1),'MM')||'/'||TO_CHAR(add_months(TRUNC(TO_DATE('01/2015','MM/YYYY') ,'mm'),rownum-1),'YY'),'dd/mm/yy')
AND tr.MESREFINI <= TO_DATE('31'||'/'||TO_CHAR(add_months(TRUNC( TO_DATE('01/2015','MM/YYYY'),'mm'),rownum-1),'MM')||'/'||TO_CHAR(add_months(TRUNC(TO_DATE('01/2015','MM/YYYY') ,'mm'),rownum-1),'YY'),'dd/mm/yy')
Esse funciona
AND tr.MESREFINI >= TO_DATE('01/03/15','dd/mm/yy')
AND tr.MESREFINI <= TO_DATE('31/03/15','dd/mm/yy')
Não sei se não funciona dentro da subquery ou por causa da concatenação tentei transformar em varios tipos e nao vai.
tentei agregar o where a subquery e tambem nao vai
FROM user_tables
WHERE rownum <= months_between ( SYSDATE, to_date('01/2015','mm/yyyy')) + 1 ;
O que eu percebi é que a subquery nao se ajusta ao rownum da query pai
FROM user_tables
WHERE rownum <= months_between ( SYSDATE, to_date('01/2015','mm/yyyy')) + 1
tem alguma forma de solucionar isso?:
O que pretende com
rownum <= months_between ( SYSDATE, to_date('01/2015','mm/yyyy')) + 1
?
Ele me gera uma lista de meses apartir de janeiro até o mes corrente
JANEIRO
FEVEREIRO
MARÇO
até novembro no caso ,se virar o mes ja entra em dezembro e a subquerys é pra dar um count de uma consulta que foi sugerido aqui, infelizmente tem que ser nesse padrão.
Ai queria jogar aquele intervalo no between de datas pra pegar a contagem daquelas datas...
Eu não entendi a razão de se montar esta query de forma "virtual" , não daria para obter as datas da referencias das tabelas correntes ?
O problema que ele vai trazer apenas quando existe registro quando uso um group by, no caso o relatorio mesmo se nao tiver nada tem que trazer a coluna do mes e ano mesmo estando zerada, eu consegui dessa forma...
Entendo , eu faço com union , exemplo simplificado
select data_venda , sum(total) total
from
(
select data_venda , sum(valor_venda) total
from vendas
where to_char(data_venda,'yyyymm') = '201511'
union all
select (to_date('201511','yyyymm'))+1 , 0
from vendas
where rownum < 31
) virtual
group by data_venda
Dessa forma não vai rolar mas obrigado pela ajuda, vou me virar aqui.
Abs
Pq não ?
Já fiz diversos relatórios deste tipo (dados faltantes) com esta estratégia.
vc quer algo algo assim, creio
from vendas group by to_char(data_venda,'mm')