tomelin 1 Denunciar post Postado Julho 31, 2014 Pessoal, Tenho uma tabela onde tem dois campos (value e time), onde cada entrada do value é 0 ou 1 e mais a hora. Preciso fazer a subtração de do ultimo value (0) elo o ultimo value (1) e assim por diante. Como posso fazer isso? Segue alguns dados do meu BD. value time 0 2014-06-02 14:41:00 1 2014-06-02 15:01:30 0 2014-06-02 15:11:30 1 2014-06-02 16:01:30 0 2014-06-02 16:11:30 A idéia é sempre ver a diferença de tempo de um valor para o outro. Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Julho 31, 2014 O objetivo é conhecer o tempo entre uma linha e outra? Eu vou precisar de algo semelhante, tenho umas idéias mirabolantes, mas preciso saber se é isso mesmo. (Esta demanda está em aberto) Compartilhar este post Link para o post Compartilhar em outros sites
tomelin 1 Denunciar post Postado Julho 31, 2014 Sim, é isso mesmo. Preciso saber o intervalo(tempo) entre um valor e o outro. Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Julho 31, 2014 Eu pensei em fazer uso de variáveis no próprio banco a partir do resultado, esta tabela não tem id ou o id dela é o campo `time`. SET @timeAnterior:= TIME('00:00:00'); SELECT v.`value`, v.`time`, TIMESTAMPDIFF(second, IF( @timeAnterior = '00:00:00', v.`time`, @timeAnterior), v.`time`) AS diferenca, @timeAnterior:= v.`time` AS ajusteVariavel FROM ( SELECT * FROM tabela WHERE `value` >= 0 AND DATE(`time`) = CURDATE() ORDER BY `time` ASC ) AS v Depois para converter o tempo de segundos para horas pode ser utilizado o SEC_TO_TIME(), mas o limite do tipo TIME é de -838:59:59 até 838:59:59. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 31, 2014 Publique a descrição da tabela, ela tem alguma chave primária ? Compartilhar este post Link para o post Compartilhar em outros sites
tomelin 1 Denunciar post Postado Julho 31, 2014 Sim,tem chave primaria: mysql> desc events; +--------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+---------------------+------+-----+---------+-------+ | eventid | bigint(20) unsigned | NO | PRI | NULL | | | source | int(11) | NO | MUL | 0 | | | object | int(11) | NO | | 0 | | | objectid | bigint(20) unsigned | NO | | 0 | | | clock | int(11) | NO | | 0 | | | value | int(11) | NO | | 0 | | | acknowledged | int(11) | NO | | 0 | | | ns | int(11) | NO | | 0 | | +--------------+---------------------+------+-----+---------+-------+ 8 rows in set (0.00 sec) Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 31, 2014 supondo uma tabela com autoincrement ... SELECT ENTRADA.CLOCK , SAIDA.CLOCK FROM (SELECT EVENTID , CLOCK FROM EVENTS WHERE VALUE = 0) ENTRADA, (SELECT EVENTID , CLOCK FROM EVENTS WHERE VALUE = 1) SAIDA WHERE ENTRADA.EVENTID + 1 = SAIDA.EVENTID ENTRADA.EVENTID + 1 = SAIDA.EVENTIDou seja "iguala" o registro 12345 ao 12346 !! Talvez está ideia básica precise de algum refino. Compartilhar este post Link para o post Compartilhar em outros sites
tomelin 1 Denunciar post Postado Agosto 1, 2014 Boa tarde, Eu fiz da seguinte forma SELECT ENTRADA.clock as ENTRADA , SAIDA.clock as SAIDA FROM (SELECT eventid , clock FROM events WHERE VALUE = 0 LIMIT 500) ENTRADA, (SELECT eventid , clock FROM events WHERE VALUE = 1 LIMIT 500) SAIDA WHERE ENTRADA.eventid + 1 = SAIDA.eventid Mas o retorno foi ENTRADA SAIDA 1371371585 1371371606 E na verdade eu preciso a diferença de um evento para o outro e não a soma de todos. Ou eu fiz errado a query? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Agosto 1, 2014 Agora vc tem as duas data&hora basta calcular a diferença. O que tem o campo "clock". Compartilhar este post Link para o post Compartilhar em outros sites
tomelin 1 Denunciar post Postado Agosto 5, 2014 Pessoal, Estou quase no meu resultado final, preciso de um último auxilio se puderem: Se tenho duas datas em timestamp, subtraindo uma pela outra no MYSQL, o valor que me retornar seira o que? segundos, minutos, horas? Vamos imaginar o seguinte ambiente: 1091845380 => Sat, 07 Aug 2004 02:23:00 GMT 1391845380 => Sat, 08 Feb 2014 07:43:00 GMT o resultado seria : 0300000000 E valor valor o que significa em tempo? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Agosto 5, 2014 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampdiff Compartilhar este post Link para o post Compartilhar em outros sites