Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia pessoal AJUDA por favor , há dois dias estou tentando acumular o tempo parado do veículo, através das informações que recebo do rastreador, é o seguinte...
a cada 1min recebo as informações, uma delas é se o veiculo está parado 0 = parado , 1 = em movimento, entre as outras colunas tem uma data_hora (dd/mm/yy hh:mm), a cada recebimento e SE parado , preciso ficar acumulando o tempo parado do mesmo!!
Certamente já pensei dessas maneiras, ao receber uma nova informação e SE parado, vou procurar na tabela de todas as informações, a último momento parado do mesmo veículo , daí subtraio a hora atual com a hora do momento anterior, exemplo , peguei a informação atual PARADO agora as 08:00, fui buscar na tabela a ultima informação PARADO, registrado anteriormente, que foi as 07:30, então entre eles tem um tempo de 30min, daí teoricamente ele ficou parado 30min. O problema é que essas informações vou solicitar a cada 1min e registrar tudo no banco, esse banco logo logo, vai crescer muito, um exemplo aqui é uma tabala do sistema antigo, tem mais de 16 milhões, imagina a cada 1min eu ter que fazer essa consulta, pegar o ultimo registro do determinado veiculo PARADO nessa tabela. Fora que ao atualiza a janela do sistema (WEB, Java , Spring), preciso fazer além desse filtro os outros..
Outra Maneira seria criar uma tabela separada, (Tempo_Parado), e registrar o momento (data_hora) , veiculo_id, daí a tabela fica um pouco menor que a do rastreio propriamente dito, então a cada 1min se o veiculo tiver parado, vou nessa tabela e procuro o momento da ultima parada dele, e vou acumulando.
Mas tem um problema nessas teoria.. imagina só... o cara parou as 8:00 daí fui acumulando ate as 8:30, já tenho aí 30min parado, agora o cara começou a se movimentar...
rodou uns 30min e o cara para novamente...... ou seja PAROU as 9:00, quando eu for pegar a última hora que ele parou o sistema vai trazer 08:30, e se eu for usar a técnica acima citado por mim, o sistema vai calcular assim , ultima parada as 8:30, pardou agora as 9:00, tempo parado MAIS 30min... espero que vocês tenham entendido......
Pensando um pouco agora, eu poderia quando filtrar as ultimas paradas, sempre pegar as duas 2 ultimas informações, e se a penúltima informação era EM MOVIMENTO, ja sei que essa parada agora é uma parada START e não um continuação de PARADO, tipo...
07:30 Parado
08:00 Parado
--------30min
08:10 Movimento
08:30 Parado
se for pelo sistema, ele vai calcular 8:30 - 8:00 vai trazer 30min PARADO, que não é (nessa última situação ele nao ficou parado 30min), na verdade ele parou agora o que pensei nesse caso foi, pegar esses 2 últimos, e caso o penúltimo seja EM MOVIMENTO, desconsiderar o calculo e somente gravar que parou, daí na próxima consulta PARADO as 8:50, o sistema vai me trazer 8:50 - 8:30 = 20min parado.
Assim acredito que funcione, porém vai da trabalho e pesando no banco terá muitas consultas em tabelas grandes de volume!!!
Qualquer dica de vocês pode ajudar a melhorar, deve ter algo mais simples!!!
Agradeço desde já!!!!
Bom dia!!!
>
1 minuto atrás, Motta disse:
Não sei se entendi mas não seria mais simples gravar a data/hora apenas quando o status (parado/andado) mudar a busca seria uma simples diferença.
Publique o modelo pois facilita pensar uma solução.
Olá Motta, sim essas informações são gravadas nesse momento, mas mesmo assim como acumularia resolvendo todas as questões, estou modelando aqui uma opção que imaginei que talvez dê certo, o modelo para essa situação ainda to criando! Obg!
Creio que a "apuração" não será possível via sql puro , ainda mais em mysql que não algo como "analytic functions" , acho que será necessário uma stored procedure para fazer isto.
>
3 minutos atrás, Motta disse:
Creio que a "apuração" não será possível via sql puro , ainda mais em mysql que não algo como "analytic functions" , acho que será necessário uma stored procedure para fazer isto.
Vdd, é algo a se considerar! No mínimo resolver a quantidade de requisições ao servidor do banco!
Não sei se entendi mas não seria mais simples gravar a data/hora apenas quando o status (parado/andado) mudar a busca seria uma simples diferença.
Publique o modelo pois facilita pensar uma solução.