Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rdpacato

Calcular média

Recommended Posts

Ok , mas se o post #10 fosse feito no manual como seria ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

então... eu teria que pegar o resultado todo da consulta e dividir por viagens fechadas... (que tenham inicio, meio e fim) os demais resultados seriam descartados...

 

 

então pegaria do inicio ao fim (da viagem) os valores do "campo" e trataria daquele jeito (sem zeros e caracteres) somaria, e dividiria pela quantidade de elementos (se somei os valores de 7 resultados, divido por 7) e o resultado dividiria por 100...

 

 

e no final daquela viagem (que tenha a mensagem final), colocaria o valor e também a soma do tempo do inicio ao fim, para a duração da viagem... daquela viagem, depois pegaria a próxima viagem...

 

 

Tenho que fazer isso para cada bloco de viagem (inicio, meio e fim)....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria isto ?

QAG0034306 VIAGEM 1 15,4
QAG0034306 VIAGEM 2 21,5

Como não se tem :

 

1) Um campo que identifique um grupo (inicio/meio/fim)

2) Campos numéricos isolados

 

Monte uma tabela auxiliar temporaria criando grupos para estes (inicio/meio/fim)

Descartar valores não númericos

 

A tabela teria

identificador
dispositivo
mensagem
valor

Com esta tabela a média é trivial

select dispositivo, avg(valor) media
from tabela
group by dispositivo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem de ver as functions de conversão de data e hora do Banco de Dados em questão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

como assim motta? é no postgresql

 

a consulta faço:

AND to_char( dt_hora_dispositivo, 'DD/MM/YYYY') BETWEEN ((?::varchar)) AND ((?::varchar))
AND to_char( dt_hora_dispositivo, 'HH24:MI') BETWEEN ((?::varchar)) AND ((?::varchar))

Recebo duas strings e comparo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem outro problema com a data.. faço o select entre estas datas, mas o campo data quando vem aquela mensagem inicio ou fim, vem com data zuada do servidor....

 

tem como eu trazer estas duas sem entrar na condição entre estas datas??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu maior problema é ter esta base "zuada" , a solução e trazer esta base para uma "base limpa" e dala extrair os dados de forma mais fácil.

 

Fora isto os sqls ficam muito complicados pois eles precisam "limpar" e dados e calcular médias etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

concordo motta.. estou com essa bucha na mão... mas a parte da média, vou fazer na aplicação por causa disso mesmo...

 

Só que a consulta por data da para ajudar rsrsrs... é o único campo que está "intacto"

 

 

Se puder me ajudar, a consulta completa é essa:

SELECT level_input, consumption, id_ult_mensagem, tb_tele.cod_dispositivo, to_char(tb_tele.dt_hora_dispositivo, 'DD/MM/YYYY HH24:MI:SS') AS dt_hora_dispositivo 
FROM tb_tele 
INNER JOIN tb_usuario ON tb_usuario.cod_usuario = tb_tele.cod_usuario 
INNER JOIN tb_v ON tb_v.id_v = tb_tele.id_v 
AND tb_usuario.cod_usuario = tb_v.cod_usuario 
WHERE tb_v.num = '9BGRP48F0EG236318'
AND tb_usuario.desc_login = 'ped6' 
AND to_char( dt_hora_dispositivo, 'DD/MM/YYYY') BETWEEN ('01/10/2014') AND ('30/10/2014') 
AND to_char( dt_hora_dispositivo, 'HH24:MI') BETWEEN ('00:00') AND ('23:59') 
AND id_ult_mensagem IN ('inicio','meio','final')
ORDER BY dt_hora_dispositivo;

Preciso:

- Quando vier data errada no inicio e fim, ele trazer mesmo assim, para tirar do período de data

- E saber pq não está aceitando quando coloco a data que existe mas não aceita se for fora do mês da consulta...

 

 

Mas só se puder motta, já te enchi bastante... desculpe e obrigado pela força

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tive um problema assim uma vez , fiz uma function temporária que fazia uma conversão dentro de um bloco protegido

begin
...
exception

Assim se houver erro na conversão um tratamento pode ser dado , retornar data nula , data do sistema etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pensei em fazer algo assim:

IF id_ult_mensagem = 'inicio' OR id_ult_mensagem = 'final' THEN
AND to_char( dt_hora_dispositivo, 'DD/MM/YYYY') BETWEEN ('01/10/2014') AND ('30/10/2014') 
AND to_char( dt_hora_dispositivo, 'HH24:MI') BETWEEN ('00:00') AND ('23:59') 
ELSE 
AND to_char( dt_hora_sistema, 'DD/MM/YYYY') BETWEEN ('01/10/2014') AND ('30/10/2014') 
AND to_char( dt_hora_sistema, 'HH24:MI') BETWEEN ('00:00') AND ('23:59') 
END IF

Mas não sei a sintaxe correta para utilizar, estou lendo a documentação ainda... vc acha que aquele outro erro de limite de data é por causa da conversão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz assim:

SELECT * FROM tb_telemetria, tb_usuario, tb_veiculo
WHERE 
(CASE WHEN id_ult_mensagem = 'meio' 
THEN to_char( dt_hora_dispositivo, 'DD/MM/YYYY') BETWEEN ('08/10/2014') AND ('08/10/2014') 
AND to_char( dt_hora_dispositivo, 'HH24:MI') BETWEEN ('09:00') AND ('10:17')  
ELSE to_char( dt_hora_sistema, 'DD/MM/YYYY') BETWEEN ('08/10/2014') AND ('08/10/2014') 
AND to_char( dt_hora_sistema, 'HH24:MI') BETWEEN ('09:00') AND ('10:17')  
END)
AND tb_usuario.cod_usuario = tb_telemetria.cod_usuario
AND tb_usuario.cod_usuario = tb_veiculo.cod_usuario
AND tb_veiculo.num_chassi = '9BGRP48F0EG236318'
AND tb_usuario.desc_login = 'ped6' 
AND id_ult_mensagem IN ('inicio','meio','fim')
ORDER BY tb_telemetria.dt_hora_sistema

Aparte de média acabei tratando na aplicação... obrigado Motta

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.