javaflex 23 de mar. de 2018
Não sei se MySql tem a função Rank nativa como nos grandes bancos, mas pesquise sobre Rank, exemplo: https://stackoverflow.com/questions/3333665/rank-function-in-mysql
Com isto, basta colocar no where se a colocação é igual a 1.
AbelBueno 23 de mar. de 2018
Para achar o tempo anterior, você pode incluir uma subquery, que busca para o mesmo PN, o maior bip que seja menor o bip da linha atual.
Depois você subtrai o bip atual desse menor bip encontrado.
Depois você orderna por pn e pela diferença encontrada na linha anterior.
Para saber o PN e o melhor tempo coletado, aagrupe o resultado anterior por PN e buscar a mínima diferença.
Algo assim:
select
* ,
bip - previous_bip diff
from
(
select * ,
( select max ( bip ) min_bip
from mesaproducao mpi
where mpi . pn = mp . pn
and mpi . bip < mp . bip
) previous_bip
from mesaproducao mp
) t_previous
fabio.argenton 23 de mar. de 2018
Obrigado pela ajuda pessoal, segue solução, desta forma exporto para Excel e faço um pouco diferente, vou calcular a média e não o menor tempo, assim terei o resultado esperado:
/* Retorna a diferença em segundos , de um Bip para Outro */
SELECT
reg_atual . pn ,
reg_atual . descricao ,
reg_anterior . bip AS bipInicial ,
reg_atual . bip AS bipFinal ,
TIMEDIFF ( STR_TO_DATE ( reg_atual . bip , '%d/%m/%Y %H:%i:%s' ), STR_TO_DATE ( reg_anterior . bip , '%d/%m/%Y %H:%i:%s' )) as tempo
FROM
mesaproducao AS reg_atual
LEFT JOIN
mesaproducao AS reg_anterior
ON reg_anterior . id < reg_atual . id
GROUP BY reg_anterior . id