Ir ao conteúdo

Posts recomendados

Postado

Boa noite,
Preciso gerar uma consulta SQL que traga o melhor tempo entre registros de uma única tabela, exemplo:

 

Minha tabela:

CREATE TABLE `mesaproducao` (
    	`id` INT(11) NOT NULL AUTO_INCREMENT,
    	`codProducao` INT(11) NOT NULL,
    	`mesaProducao` VARCHAR(50) NOT NULL,
    	`pn` VARCHAR(50) NOT NULL,
    	`descricao` VARCHAR(50) NOT NULL,
    	`multiplo` INT(11) NOT NULL,
    	`tipo` VARCHAR(50) NOT NULL,
    	`lote` VARCHAR(50) NOT NULL,
    	`bip` VARCHAR(50) NOT NULL,
    	PRIMARY KEY (`id`)
    )

 

Abaixo explicado e destacado de verde o que quero trazer com este SELECT:

 

image.thumb.png.c07982d44c5dc95f1ebbe7a6054af797.png

Postado

Dá para chegar a esse resultado com as seguintes consultas.

/*Retorna a diferença em segundos, você deve tratar a formação na sua aplicação*/
SELECT
  mp_atual.pn,
  mp_atual.descricao,
  MIN(UNIX_TIMESTAMP(STR_TO_DATE(mp_atual.bip, '%d/%m/%Y %H:%i:%s')) - UNIX_TIMESTAMP(STR_TO_DATE(mp_anterior.bip, '%d/%m/%Y %H:%i:%s'))) as diff
FROM
  `mesaproducao` AS mp_atual
LEFT JOIN
  mesaproducao AS mp_anterior
ON
  mp_anterior.id < mp_atual.id
GROUP BY
  mp_atual.pn,
  mp_atual.descricao

/*Ou, retorna a diferença como TIME porém falha se existir alguma diferença superior a 24 horas(embora na documentação o valor maximo seja 838:59:59 https://dev.mysql.com/doc/refman/5.7/en/time.html) no resultado final ou inferior a 0 segundos(acontece caso algum registro posterior tenha a data inferior)(embora a documentação informe o valor minimo seja -838:59:59 https://dev.mysql.com/doc/refman/5.7/en/time.html)*/
SELECT
  mp_atual.pn,
  mp_atual.descricao,
  SEC_TO_TIME(MIN(UNIX_TIMESTAMP(STR_TO_DATE(mp_atual.bip, '%d/%m/%Y %H:%i:%s')) - UNIX_TIMESTAMP(STR_TO_DATE(mp_anterior.bip, '%d/%m/%Y %H:%i:%s')))) as diff
FROM
  `mesaproducao` AS mp_atual
LEFT JOIN
  mesaproducao AS mp_anterior
ON
  mp_anterior.id < mp_atual.id
GROUP BY
  mp_atual.pn,
  mp_atual.descricao

/*Ou, porém falha se for calculada alguma diferença maior que 24 horas(embora na documentação o valor maximo seja 838:59:59 https://dev.mysql.com/doc/refman/5.7/en/time.html) mesmo que ela não vá aparecer no resultado final ou inferior a 0 segundos(acontece caso algum registro posterior tenha a data inferior)(embora a documentação informe o valor minimo seja -838:59:59 https://dev.mysql.com/doc/refman/5.7/en/time.html).*/
SELECT
  mp_atual.pn,
  mp_atual.descricao,
  MIN(TIMEDIFF(STR_TO_DATE(mp_atual.bip, '%d/%m/%Y %H:%i:%s'), STR_TO_DATE(mp_anterior.bip, '%d/%m/%Y %H:%i:%s'))) as diff
FROM
  `mesaproducao` AS mp_atual
LEFT JOIN
  mesaproducao AS mp_anterior
ON
  mp_anterior.id < mp_atual.id
GROUP BY
  mp_atual.pn,
  mp_atual.descricao

Pode ser testado em http://sqlfiddle.com/#!9/20b18b.

Postado

Obrigado pela ajuda pessoal, HwapX você é fera, fiquei com a terceira opção porém modifiquei um pouco...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

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!