Re: [oracle_br] SQL - Group by Range de horário
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
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
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
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;