Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

tomelin

Subtrair valores da mesma tabela

Recommended Posts

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

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

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

Publique a descrição da tabela, ela tem alguma chave primária ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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.EVENTID

ou 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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.