Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
Sim, é isso mesmo.
Preciso saber o intervalo(tempo) entre um valor e o outro.
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.Publique a descrição da tabela, ela tem alguma chave primária ?
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)
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) SAIDAENTRADA.EVENTID + 1 = SAIDA.EVENTIDou seja "iguala" o registro 12345 ao 12346 !!
Talvez está ideia básica precise de algum refino.
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(SELECT eventid , clock
FROM events
WHERE VALUE = 1Mas 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?
Agora vc tem as duas data&hora basta calcular a diferença.
O que tem o campo "clock".
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?
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)