Tchello Postado Julho 17, 2014 Denunciar Share Postado Julho 17, 2014 Tenho uma tabela de alteração de status com as colunas status e data_da_alteração. Ex.: idcadastro status data_da_alteracao diferenca_horas 123 0 2014-07-01 09:50:00 123 1 2014-07-02 08:50:00 23:00 123 2 2014-07-03 10:00:00 24:10 123 3 2014-07-04 09:00:00 23:00 Como faço para calcular a diferença de horas entre um status e outro? Como calculo a diferença na mesma coluna? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Julho 17, 2014 Denunciar Share Postado Julho 17, 2014 Use uma storage procedure com cursor e fetch. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Tchello Postado Julho 21, 2014 Autor Denunciar Share Postado Julho 21, 2014 Pode me passar um exemplo? Nunca trabalhei com storage procedure? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Julho 22, 2014 Denunciar Share Postado Julho 22, 2014 Faça assim:create table horario( idcadastro int unsigned, `status`int unsigned, data_da_alteracao datetime, diferenca_horas time); insert into horario(idcadastro,`status`,data_da_alteracao) values(123,0,"2014-07-01 09:50:00"), (123,1,"2014-07-02 08:50:00"), (123,2,"2014-07-03 10:00:00"), (123,3,"2014-07-04 09:00:00"); call calculaDiferencaHoras; select timediff("2014-07-02 08:50:00","2014-07-01 09:50:00"); select timediff("2014-07-03 10:00:00","2014-07-02 08:50:00"); select timediff("2014-07-04 09:00:00","2014-07-03 10:00:00"); DELIMITER $$; DROP PROCEDURE IF EXISTS `test`.`calculaDiferencaHoras`$$ CREATE PROCEDURE `test`.`calculaDiferencaHoras` () BEGIN DECLARE msg VARCHAR(100) DEFAULT 'Calculado com sucesso'; DECLARE idcadastro_ant INT UNSIGNED; DECLARE idcadastro_atual INT UNSIGNED; DECLARE status_ant INT UNSIGNED; DECLARE status_atual INT UNSIGNED; DECLARE dtAlteracao_ant DATETIME; DECLARE dtAlteracao_atual DATETIME; DECLARE diferenca TIME; DECLARE done SMALLINT UNSIGNED DEFAULT 0; DECLARE excessao SMALLINT UNSIGNED DEFAULT 0; DECLARE c_horario CURSOR FOR SELECT idcadastro,`status`,data_da_alteracao FROM horario; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excessao = 1; OPEN c_horario; FETCH c_horario INTO idcadastro_ant, status_ant, dtAlteracao_ant; FETCH c_horario INTO idcadastro_atual, status_atual, dtAlteracao_atual; WHILE done <> 1 DO SET diferenca = TIMEDIFF(dtAlteracao_atual, dtAlteracao_ant); START TRANSACTION; UPDATE horario SET diferenca_horas = diferenca WHERE idcadastro = idcadastro_atual AND `status` = status_atual; IF excessao = 1 THEN SET msg = "Erro na autualizacao de horario"; ROLLBACK; SET done = 1; ELSE COMMIT; END IF; SET idcadastro_ant = idcadastro_atual; SET status_ant = status_atual; SET dtAlteracao_ant = dtAlteracao_atual; FETCH c_horario INTO idcadastro_atual, status_atual, dtAlteracao_atual; END WHILE; CLOSE c_horario; SELECT msg; END$$ DELIMITER ;$$ Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Tchello
Tenho uma tabela de alteração de status com as colunas status e data_da_alteração.
Ex.:
idcadastro status data_da_alteracao diferenca_horas
123 0 2014-07-01 09:50:00
123 1 2014-07-02 08:50:00 23:00
123 2 2014-07-03 10:00:00 24:10
123 3 2014-07-04 09:00:00 23:00
Como faço para calcular a diferença de horas entre um status e outro?
Como calculo a diferença na mesma coluna?
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.