Todas as horas do dia em uma consulta
16/12/2015
0
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é
Posts
16/12/2015
Fabiano Carvalho
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.
16/12/2015
José
É 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
16/12/2015
Marcos P
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>.
16/12/2015
José
16/12/2015
Fabiano Carvalho
Utilize left,right para trazer todas as horas independente se existe ou nao apontamento.
16/12/2015
José
16/12/2015
Marcos P
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á...
06/01/2016
José
Nenhuma delas deu certo, tentei todas.
06/01/2016
José
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
06/01/2016
Marcos P
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.
06/01/2016
José
Obrigado pela ajuda.
06/01/2016
Marcos P
Se precisar de ajuda, crie a estrutura da tabela e coloque alguns registro no SqlFiddle que te ajudo por lá...
SqlFiddle
06/01/2016
José
06/01/2016
Marcos P
O resto eu faço !
SqlFiddle
Clique aqui para fazer login e interagir na Comunidade :)