Todas as horas do dia em uma consulta
Tenho a seguinte consulta, ela pega as temperaturas no dia e vai jogando no banco.
Porém ela só pega as temperaturas em horas especificas do dia eu preciso que ele pegue do dia todo, exemplo as 09 horas não tenha nenhuma medição que no resultado da consulta aparece NULL NULL NULL NULL NULL 09.
select
fcm.SEQUENCIA SEQUENCIA,
fcm.TEMPERATURA1 TEMP1,
fcm.TEMPERATURA2 TEMP2,
fcm.TEMPERATURA3 TEMP3,
fcm.TEMPERATURA4 TEMP4,
fcm.TEMPO_MILIS,
TO_DATE('01/01/1970','dd/mm/yyyy')+(fcm.TEMPO_MILIS/1000/60/60/24)/*GMT-2)*/-1/12 /* GMT-2*/ data,
to_char(TO_DATE('01/01/1970','dd/mm/yyyy')+(fcm.TEMPO_MILIS/1000/60/60/24),'dd/mm/yyyy') data2,
to_char(TO_DATE('01/01/1970','dd/mm/yyyy')+(fcm.TEMPO_MILIS/1000/60/60/24)-1/12,'HH24') hora
from medicioes_temperaturas fcm,
terminais_ativios fct
where fcm.id_ativo = fct.id
and fct.id = :p_pasteurizador
and TO_DATE('01/01/1970','dd/mm/yyyy')+(fcm.TEMPO_MILIS/1000/60/60/24)-1/12 between :p_data_inicial and :p_data_final
and fcm.status_prod = :p_status_prod
group by TO_DATE('01/01/1970','dd/mm/yyyy')+(fcm.TEMPO_MILIS/1000/60/60/24)/*GMT-2)*/-1/12 /* GMT-2*/,
fcm.SEQUENCIA ,
fcm.TEMPERATURA1 ,
fcm.TEMPERATURA2 ,
fcm.TEMPERATURA3 ,
fcm.TEMPERATURA4 ,
fcm.TEMPO_MILIS
order by to_char(TO_DATE('01/01/1970','dd/mm/yyyy')+(fcm.TEMPO_MILIS/1000/60/60/24)-1/12,'HH24');
Resultado:
1 73,36 73,11 4,28 1448351855827 24/11/15 05:57:36 24/11/2015 05
1 73,22 73,2 4,94 1448350745578 24/11/15 05:39:06 24/11/2015 05
1 72,76 72,62 4,88 1448350835587 24/11/15 05:40:36 24/11/2015 05
1 72,8 72,54 4,85 1448350865590 24/11/15 05:41:06 24/11/2015 05
1 73,49 73,16 4,71 1448351045609 24/11/15 05:44:06 24/11/2015 05
1 73,13 73 4,67 1448351145619 24/11/15 05:45:46 24/11/2015 05
1 73,09 72,97 4,67 1448351155620 24/11/15 05:45:56 24/11/2015 05
1 73,07 72,92 4,67 1448351165621 24/11/15 05:46:06 24/11/2015 05
1 73,36 73,03 4,6 1448351385643 24/11/15 05:49:46 24/11/2015 05
1 73,39 73,1 4,55 1448351455699 24/11/15 05:50:56 24/11/2015 05
1 73,36 73,1 4,55 1448351465700 24/11/15 05:51:06 24/11/2015 05
1 73,24 73,03 4,51 1448351565763 24/11/15 05:52:46 24/11/2015 05
1 73,21 73 4,41 1448351605802 24/11/15 05:53:26 24/11/2015 05
1 73,21 72,98 4,36 1448351645806 24/11/15 05:54:06 24/11/2015 05
1 73,21 72,94 4,34 1448351655807 24/11/15 05:54:16 24/11/2015 05
1 73,24 72,94 4,32 1448351695811 24/11/15 05:54:56 24/11/2015 05
1 73,27 72,98 4,34 1448351725814 24/11/15 05:55:26 24/11/2015 05
1 73,3 73 4,34 1448351755817 24/11/15 05:55:56 24/11/2015 05
1 73,32 73,04 4,32 1448351765818 24/11/15 05:56:06 24/11/2015 05
1 73,42 73,06 4,32 1448351815823 24/11/15 05:56:56 24/11/2015 05
1 73,36 73,06 4,31 1448351825824 24/11/15 05:57:06 24/11/2015 05
1 73,34 73,13 4,32 1448351835825 24/11/15 05:57:16 24/11/2015 05
1 73,27 73,03 4,24 1448351975839 24/11/15 05:59:36 24/11/2015 05
O que eu preciso:
NULL NULL NULL NULL NULL NULL 09 Apenas mostrando as horas.
Porque você quer isso ?
Vou jogar em um XML e isso vai me gerar um gráfico das temperaturas! Se puderem fico muito agradecido.
Porém ela só pega as temperaturas em horas especificas do dia eu preciso que ele pegue do dia todo, exemplo as 09 horas não tenha nenhuma medição que no resultado da consulta aparece NULL NULL NULL NULL NULL 09.
select
fcm.SEQUENCIA SEQUENCIA,
fcm.TEMPERATURA1 TEMP1,
fcm.TEMPERATURA2 TEMP2,
fcm.TEMPERATURA3 TEMP3,
fcm.TEMPERATURA4 TEMP4,
fcm.TEMPO_MILIS,
TO_DATE('01/01/1970','dd/mm/yyyy')+(fcm.TEMPO_MILIS/1000/60/60/24)/*GMT-2)*/-1/12 /* GMT-2*/ data,
to_char(TO_DATE('01/01/1970','dd/mm/yyyy')+(fcm.TEMPO_MILIS/1000/60/60/24),'dd/mm/yyyy') data2,
to_char(TO_DATE('01/01/1970','dd/mm/yyyy')+(fcm.TEMPO_MILIS/1000/60/60/24)-1/12,'HH24') hora
from medicioes_temperaturas fcm,
terminais_ativios fct
where fcm.id_ativo = fct.id
and fct.id = :p_pasteurizador
and TO_DATE('01/01/1970','dd/mm/yyyy')+(fcm.TEMPO_MILIS/1000/60/60/24)-1/12 between :p_data_inicial and :p_data_final
and fcm.status_prod = :p_status_prod
group by TO_DATE('01/01/1970','dd/mm/yyyy')+(fcm.TEMPO_MILIS/1000/60/60/24)/*GMT-2)*/-1/12 /* GMT-2*/,
fcm.SEQUENCIA ,
fcm.TEMPERATURA1 ,
fcm.TEMPERATURA2 ,
fcm.TEMPERATURA3 ,
fcm.TEMPERATURA4 ,
fcm.TEMPO_MILIS
order by to_char(TO_DATE('01/01/1970','dd/mm/yyyy')+(fcm.TEMPO_MILIS/1000/60/60/24)-1/12,'HH24');
Resultado:
1 73,36 73,11 4,28 1448351855827 24/11/15 05:57:36 24/11/2015 05
1 73,22 73,2 4,94 1448350745578 24/11/15 05:39:06 24/11/2015 05
1 72,76 72,62 4,88 1448350835587 24/11/15 05:40:36 24/11/2015 05
1 72,8 72,54 4,85 1448350865590 24/11/15 05:41:06 24/11/2015 05
1 73,49 73,16 4,71 1448351045609 24/11/15 05:44:06 24/11/2015 05
1 73,13 73 4,67 1448351145619 24/11/15 05:45:46 24/11/2015 05
1 73,09 72,97 4,67 1448351155620 24/11/15 05:45:56 24/11/2015 05
1 73,07 72,92 4,67 1448351165621 24/11/15 05:46:06 24/11/2015 05
1 73,36 73,03 4,6 1448351385643 24/11/15 05:49:46 24/11/2015 05
1 73,39 73,1 4,55 1448351455699 24/11/15 05:50:56 24/11/2015 05
1 73,36 73,1 4,55 1448351465700 24/11/15 05:51:06 24/11/2015 05
1 73,24 73,03 4,51 1448351565763 24/11/15 05:52:46 24/11/2015 05
1 73,21 73 4,41 1448351605802 24/11/15 05:53:26 24/11/2015 05
1 73,21 72,98 4,36 1448351645806 24/11/15 05:54:06 24/11/2015 05
1 73,21 72,94 4,34 1448351655807 24/11/15 05:54:16 24/11/2015 05
1 73,24 72,94 4,32 1448351695811 24/11/15 05:54:56 24/11/2015 05
1 73,27 72,98 4,34 1448351725814 24/11/15 05:55:26 24/11/2015 05
1 73,3 73 4,34 1448351755817 24/11/15 05:55:56 24/11/2015 05
1 73,32 73,04 4,32 1448351765818 24/11/15 05:56:06 24/11/2015 05
1 73,42 73,06 4,32 1448351815823 24/11/15 05:56:56 24/11/2015 05
1 73,36 73,06 4,31 1448351825824 24/11/15 05:57:06 24/11/2015 05
1 73,34 73,13 4,32 1448351835825 24/11/15 05:57:16 24/11/2015 05
1 73,27 73,03 4,24 1448351975839 24/11/15 05:59:36 24/11/2015 05
O que eu preciso:
NULL NULL NULL NULL NULL NULL 09 Apenas mostrando as horas.
Porque você quer isso ?
Vou jogar em um XML e isso vai me gerar um gráfico das temperaturas! Se puderem fico muito agradecido.
José
Curtidas 0
Respostas
Fabiano Carvalho
16/12/2015
Entendi nada rs.
O que você deseja de resultado final? Expliqe o cenário atual e o que deseja de resultado final.
Imagino que seja possível realizar o que deseja.
O que você deseja de resultado final? Expliqe o cenário atual e o que deseja de resultado final.
Imagino que seja possível realizar o que deseja.
GOSTEI 0
José
16/12/2015
Beleza,
É o seguinte você está vendo o resultado da consulta certo? Ela pega as temperaturas em algumas horas do dia em um aparelho e joga no banco. A consulta acima mostra as temperaturas e as horas do dia que foram capturadas. Eu preciso jogar isso em um XML e gerar um gráfico. Para esse gráfico ficar melhor o ideal seria que a consulta retornasse todas as horas tô dia.
Exemplo aquele resultado ali em nenhum momento tem a medição de temperatura as 09, 10 horas. Então que aparece todos os campos NULL e apenas a hora.
Exemplo :
NULL NULL NULL NULL NULL NULL 9
9= HORAS
É o seguinte você está vendo o resultado da consulta certo? Ela pega as temperaturas em algumas horas do dia em um aparelho e joga no banco. A consulta acima mostra as temperaturas e as horas do dia que foram capturadas. Eu preciso jogar isso em um XML e gerar um gráfico. Para esse gráfico ficar melhor o ideal seria que a consulta retornasse todas as horas tô dia.
Exemplo aquele resultado ali em nenhum momento tem a medição de temperatura as 09, 10 horas. Então que aparece todos os campos NULL e apenas a hora.
Exemplo :
NULL NULL NULL NULL NULL NULL 9
9= HORAS
GOSTEI 0
Marcos P
16/12/2015
Adapte a partir dessa ideia...
P.S.: Sempre que inserir código no fórum, utilize a tag <Inserir Codigo>.
select medida1, medida2, medida3, medida4, medida5, medida6, 0 as Hora from tabela where Hora = 0 union all select medida1, medida2, medida3, medida4, medida5, medida6, 1 as Hora from tabela where Hora = 1 union all select medida1, medida2, medida3, medida4, medida5, medida6, 2 as Hora from tabela where Hora = 2 union all select medida1, medida2, medida3, medida4, medida5, medida6, 3 as Hora from tabela where Hora = 3 union all : select medida1, medida2, medida3, medida4, medida5, medida6, 22 as Hora from tabela where Hora = 22 union all select medida1, medida2, medida3, medida4, medida5, medida6, 23 as Hora from tabela where Hora = 23
P.S.: Sempre que inserir código no fórum, utilize a tag <Inserir Codigo>.
GOSTEI 0
José
16/12/2015
O problema de usar o metodo acima é que eu não tenho uma tabela com todas as horas, já havia pensando dessa forma.
GOSTEI 0
Fabiano Carvalho
16/12/2015
E porque voce não cria uma com todas?
Utilize left,right para trazer todas as horas independente se existe ou nao apontamento.
Utilize left,right para trazer todas as horas independente se existe ou nao apontamento.
GOSTEI 0
José
16/12/2015
Infelizmente não vou ter autoridade pra isso aqui no banco. : (
GOSTEI 0
Marcos P
16/12/2015
Crie um cursor que recupere as "horas" disponiveis.
Depois disso, navegue pelo cursor sequencialmente das 0 as 23 horas.
Se existirem registros naquela "hora" você apresenta os resultados disponíveis.
Caso contrário, apresenta zero ( ou nulo ) para aquela hora.
Outra alternativa : crie uma temporária com TODAS as horas do dia... depois faça LEFT / RIGHT JOIN dessa temporária com teus dados. As horas com dados, você mostra. As horas sem dados, você apresenta zero ( ou nulo ).
Se precisar de ajuda, crie a estrutura da tabela e coloque alguns registro no SqlFiddle que te ajudo por lá...
Depois disso, navegue pelo cursor sequencialmente das 0 as 23 horas.
Se existirem registros naquela "hora" você apresenta os resultados disponíveis.
Caso contrário, apresenta zero ( ou nulo ) para aquela hora.
Outra alternativa : crie uma temporária com TODAS as horas do dia... depois faça LEFT / RIGHT JOIN dessa temporária com teus dados. As horas com dados, você mostra. As horas sem dados, você apresenta zero ( ou nulo ).
Se precisar de ajuda, crie a estrutura da tabela e coloque alguns registro no SqlFiddle que te ajudo por lá...
GOSTEI 0
Jothaz
16/12/2015
Você não tem permissão nem para criar uma tabela temporária?
GOSTEI 0
José
16/12/2015
Não, não posso criar nem uma tabela temporária ...
Nenhuma delas deu certo, tentei todas.
Nenhuma delas deu certo, tentei todas.
GOSTEI 0
José
16/12/2015
Seria mais ou menos o seguinte exemplificando um pouco melhor, eu preciso retornar todas as horas do dia para depois gerar um gráfico.
Basicamente o resultado deve ser
TEMP 1, TEMP 2, TEMP 3, TEMP 4 HORA
5 6 8 1 15
3 5 8 0 16
NULL NULL NULL NULL NULL
Basicamente o resultado deve ser
TEMP 1, TEMP 2, TEMP 3, TEMP 4 HORA
5 6 8 1 15
3 5 8 0 16
NULL NULL NULL NULL NULL
GOSTEI 0
Marcos P
16/12/2015
Crie um cursor que recupere as "horas" disponiveis.
Depois disso, navegue pelo cursor sequencialmente das 0 as 23 horas.
Se existirem registros naquela "hora" você apresenta os resultados disponíveis.
Caso contrário, apresenta zero ( ou nulo ) para aquela hora.
GOSTEI 0
José
16/12/2015
Não entendo muito da criação de cursores ? me indicaria algo ?
Obrigado pela ajuda.
Obrigado pela ajuda.
GOSTEI 0
Marcos P
16/12/2015
Se precisar de ajuda, crie a estrutura da tabela e coloque alguns registro no SqlFiddle que te ajudo por lá...
SqlFiddle
GOSTEI 0
José
16/12/2015
E como vou fazer o select de todas as horas se eu não tenho essa informação em tabela nenhuma ?
GOSTEI 0
Marcos P
16/12/2015
Cara, é o seguinte... se você quer que eu te ajude, crie a estrutura das tabelas e popule-as com alguns registros que simulem os dados do teu ambiente real.
O resto eu faço !
SqlFiddle
O resto eu faço !
SqlFiddle
GOSTEI 0
Marcos P
16/12/2015
Se quiser criar apenas uma tabela com os exemplos, também está valendo...
GOSTEI 0
José
16/12/2015
Assim que sobrar tempo eu crio lá beleza ?
Muito obrigado.
Muito obrigado.
GOSTEI 0
José
16/12/2015
O problema de agora,
as horas que não há medidas não ha dado nenhum na tabela, o que complica mais as coisas.
as horas que não há medidas não ha dado nenhum na tabela, o que complica mais as coisas.
GOSTEI 0
Marcos P
16/12/2015
Quem está complicando as coisas é você... sua necessidade não é selecionar as temperaturas ( hora-a-hora ), mostrando a hora mesmo quando não existe registro de temperatura naquela hora ?
Crie uma tabela com cinco colunas ( T1, T2, T3, T4 e HORA ) e insira alguns registros de teste.
Eu monto o cursor e você, depois, o adapta ao seu ambiente.
Não tem nada de complicado nisso...
Crie uma tabela com cinco colunas ( T1, T2, T3, T4 e HORA ) e insira alguns registros de teste.
Eu monto o cursor e você, depois, o adapta ao seu ambiente.
Não tem nada de complicado nisso...
GOSTEI 0
José
16/12/2015
Alguém sabe aumentar o eixo X em um RTF ? Gráfico é aumentando em uma imagem ...
GOSTEI 0