Re: [oracle_br] SQL - Group by Range de horário

2014-03-20 Por tôpico Andre Santos
Miltão

Legal! Valeu pelo retorno!
Sem usar o join... pode ser que exista uma maneira... talvez por função
analítica... (teria de pesquisar).

[ ]'s

André



Em 20 de março de 2014 16:11, Milton Bastos Henriquis Jr. <
miltonbas...@gmail.com> escreveu:

>
>
> Era essa a solução que eu tava discutindo com o Vitor Jr. aqui via skype,
> André!
> Achamos essa sugestão em outro fórum, mas fiquei na dúvida se havia ou não
> algum recurso do SQL
> no Oracle pra que não precisasse fazer um join.
>
> Mas pelo visto acho que a solução é essa mesma!
>
> Valeu, brigadão!
>
>
> Em 20 de março de 2014 15:51, Andre Santos 
> escreveu:
>
>
>>
>> Miltão
>>
>> Peguei uma daquelas consultas "geradoras de linhas" (exemplos em:
>> http://orafaq.com/wiki/Oracle_Row_Generator_Techniques)...
>> A de sintaxe mais simplezinha:
>>
>> SELECT LEVEL just_a_column
>> FROM dual
>> CONNECT BY LEVEL <= 365;
>>
>> E montei esta aqui:
>>
>> SELECT to_date('01/03/2014','dd/mm/') + ((1/48) * (LEVEL - 1)) as
>> data_hora
>> FROM dual
>> CONNECT BY LEVEL <= ((to_date('31/03/2014','dd/mm/') + 1) -
>> to_date('01/03/2014','dd/mm/')) * 48;
>>
>> Com este resultset (mudando as datas inicial e final), você pode fazer um
>> "outer join" com a sua consulta.
>> Para as linhas que retornarem NULL na coluna correspondente ao COUNT(*),
>> pode-se usar NVL.
>>
>> Faça uns testes aí... veja se ajuda.
>>
>> [ ]'s
>>
>> André Santos
>>
>>
>>
>>
>>
>> Em 20 de março de 2014 15:06, Milton Bastos Henriquis Jr. <
>> miltonbas...@gmail.com> escreveu:
>>
>>
>>>
>>> Olá amigos!
>>>
>>> Preciso de ajuda com um SQL...
>>>
>>> Preciso fazer um agrupamento por faixa de hora/data, com intervalos de
>>> meia hora
>>> Até aí tudo bem, já consegui fazer, fica mais ou menos assim:
>>>
>>> campo_dataquantidade
>>>
>>> 20/03 8:002   (aqui mostra o count de registros com hora de 8:00
>>> até 8:29)
>>> 20/03 8:305   (aqui mostra o count de registros com hora de 8:30
>>> até 8:59)
>>> 20/03 9:003E assim por diante...
>>> 20/03 10:30  1
>>>
>>>
>>> Reparem que não aparece registro de 9:30 nem de 10:00, por não existirem
>>> registros nesse intervalo de horário.
>>>
>>> Minha dúvida é: como faço pra aparecer também essas faixas que não
>>> existe registro,
>>> pra eu poder mostrar o 0 (zero) na quantidade?
>>>
>>> Minha query atualmente está assim:
>>>
>>>
>>>  select trunc(campo_data,'DD/MM HH24') +
>>> (trunc(to_char(campo_data,'mi')/60)*60)/24/60 as dia_hora,
>>>count(item) as quantidade
>>>   from tabela1
>>>  group by  trunc(campo_data,'DD/MM HH24') +
>>> (trunc(to_char(campo_data,'mi')/60)*60)/24/60;
>>>
>>>
>>
>
>


Re: [oracle_br] SQL - Group by Range de horário

2014-03-20 Por tôpico Milton Bastos Henriquis Jr.
Era essa a solução que eu tava discutindo com o Vitor Jr. aqui via skype,
André!
Achamos essa sugestão em outro fórum, mas fiquei na dúvida se havia ou não
algum recurso do SQL
no Oracle pra que não precisasse fazer um join.

Mas pelo visto acho que a solução é essa mesma!

Valeu, brigadão!


Em 20 de março de 2014 15:51, Andre Santos escreveu:

>
>
> Miltão
>
> Peguei uma daquelas consultas "geradoras de linhas" (exemplos em:
> http://orafaq.com/wiki/Oracle_Row_Generator_Techniques)...
> A de sintaxe mais simplezinha:
>
> SELECT LEVEL just_a_column
> FROM dual
> CONNECT BY LEVEL <= 365;
>
> E montei esta aqui:
>
> SELECT to_date('01/03/2014','dd/mm/') + ((1/48) * (LEVEL - 1)) as
> data_hora
> FROM dual
> CONNECT BY LEVEL <= ((to_date('31/03/2014','dd/mm/') + 1) -
> to_date('01/03/2014','dd/mm/')) * 48;
>
> Com este resultset (mudando as datas inicial e final), você pode fazer um
> "outer join" com a sua consulta.
> Para as linhas que retornarem NULL na coluna correspondente ao COUNT(*),
> pode-se usar NVL.
>
> Faça uns testes aí... veja se ajuda.
>
> [ ]'s
>
> André Santos
>
>
>
>
>
> Em 20 de março de 2014 15:06, Milton Bastos Henriquis Jr. <
> miltonbas...@gmail.com> escreveu:
>
>
>>
>> Olá amigos!
>>
>> Preciso de ajuda com um SQL...
>>
>> Preciso fazer um agrupamento por faixa de hora/data, com intervalos de
>> meia hora
>> Até aí tudo bem, já consegui fazer, fica mais ou menos assim:
>>
>> campo_dataquantidade
>>
>> 20/03 8:002   (aqui mostra o count de registros com hora de 8:00
>> até 8:29)
>> 20/03 8:305   (aqui mostra o count de registros com hora de 8:30
>> até 8:59)
>> 20/03 9:003E assim por diante...
>> 20/03 10:30  1
>>
>>
>> Reparem que não aparece registro de 9:30 nem de 10:00, por não existirem
>> registros nesse intervalo de horário.
>>
>> Minha dúvida é: como faço pra aparecer também essas faixas que não existe
>> registro,
>> pra eu poder mostrar o 0 (zero) na quantidade?
>>
>> Minha query atualmente está assim:
>>
>>
>>  select trunc(campo_data,'DD/MM HH24') +
>> (trunc(to_char(campo_data,'mi')/60)*60)/24/60 as dia_hora,
>>count(item) as quantidade
>>   from tabela1
>>  group by  trunc(campo_data,'DD/MM HH24') +
>> (trunc(to_char(campo_data,'mi')/60)*60)/24/60;
>>
>>
>
>


Re: [oracle_br] SQL - Group by Range de horário

2014-03-20 Por tôpico Andre Santos
Miltão

Peguei uma daquelas consultas "geradoras de linhas" (exemplos em:
http://orafaq.com/wiki/Oracle_Row_Generator_Techniques)...
A de sintaxe mais simplezinha:

SELECT LEVEL just_a_column
FROM dual
CONNECT BY LEVEL <= 365;

E montei esta aqui:

SELECT to_date('01/03/2014','dd/mm/') + ((1/48) * (LEVEL - 1)) as
data_hora
FROM dual
CONNECT BY LEVEL <= ((to_date('31/03/2014','dd/mm/') + 1) -
to_date('01/03/2014','dd/mm/')) * 48;

Com este resultset (mudando as datas inicial e final), você pode fazer um
"outer join" com a sua consulta.
Para as linhas que retornarem NULL na coluna correspondente ao COUNT(*),
pode-se usar NVL.

Faça uns testes aí... veja se ajuda.

[ ]'s

André Santos





Em 20 de março de 2014 15:06, Milton Bastos Henriquis Jr. <
miltonbas...@gmail.com> escreveu:

>
>
> Olá amigos!
>
> Preciso de ajuda com um SQL...
>
> Preciso fazer um agrupamento por faixa de hora/data, com intervalos de
> meia hora
> Até aí tudo bem, já consegui fazer, fica mais ou menos assim:
>
> campo_dataquantidade
>
> 20/03 8:002   (aqui mostra o count de registros com hora de 8:00
> até 8:29)
> 20/03 8:305   (aqui mostra o count de registros com hora de 8:30
> até 8:59)
> 20/03 9:003E assim por diante...
> 20/03 10:30  1
>
>
> Reparem que não aparece registro de 9:30 nem de 10:00, por não existirem
> registros nesse intervalo de horário.
>
> Minha dúvida é: como faço pra aparecer também essas faixas que não existe
> registro,
> pra eu poder mostrar o 0 (zero) na quantidade?
>
> Minha query atualmente está assim:
>
>
>  select trunc(campo_data,'DD/MM HH24') +
> (trunc(to_char(campo_data,'mi')/60)*60)/24/60 as dia_hora,
>count(item) as quantidade
>   from tabela1
>  group by  trunc(campo_data,'DD/MM HH24') +
> (trunc(to_char(campo_data,'mi')/60)*60)/24/60;
>
>
>


[oracle_br] SQL - Group by Range de horário

2014-03-20 Por tôpico Milton Bastos Henriquis Jr.
Olá amigos!

Preciso de ajuda com um SQL...

Preciso fazer um agrupamento por faixa de hora/data, com intervalos de meia
hora
Até aí tudo bem, já consegui fazer, fica mais ou menos assim:

campo_dataquantidade

20/03 8:002   (aqui mostra o count de registros com hora de 8:00
até 8:29)
20/03 8:305   (aqui mostra o count de registros com hora de 8:30
até 8:59)
20/03 9:003E assim por diante...
20/03 10:30  1


Reparem que não aparece registro de 9:30 nem de 10:00, por não existirem
registros nesse intervalo de horário.

Minha dúvida é: como faço pra aparecer também essas faixas que não existe
registro,
pra eu poder mostrar o 0 (zero) na quantidade?

Minha query atualmente está assim:


 select trunc(campo_data,'DD/MM HH24') +
(trunc(to_char(campo_data,'mi')/60)*60)/24/60 as dia_hora,
   count(item) as quantidade
  from tabela1
 group by  trunc(campo_data,'DD/MM HH24') +
(trunc(to_char(campo_data,'mi')/60)*60)/24/60;