2014-07-21 4 views
0

안녕하세요 저는 mysql을 처음 접했습니다. 나는 테이블과 같이 있습니다타임 스탬프 사이의 차이를 계산 myqsl

TIME    | USER  | interval 
---------------------------------------------- 
2014-07-06 23:00:42 |  ngm  | 0 
---------------------------------------------- 
2014-07-06 23:01:33 |  ngm  | 1 
---------------------------------------------- 
2014-07-06 23:02:41 |  cpg  | 0 
---------------------------------------------- 
2014-07-06 23:03:48 |  ngm  | 2 
---------------------------------------------- 
2014-07-06 23:13:09 |  cpg  | 11 
---------------------------------------------- 
2014-07-06 23:18:31 |  cpg  | 5 
---------------------------------------------- 

도와주세요 : 그것과 같을 것이다 있도록

TIME    | USER  | interval 
---------------------------------------------- 
2014-07-06 23:00:42 |  ngm  | 
---------------------------------------------- 
2014-07-06 23:01:33 |  ngm  | 
---------------------------------------------- 
2014-07-06 23:02:41 |  cpg  | 
---------------------------------------------- 
2014-07-06 23:03:48 |  ngm  | 
---------------------------------------------- 
2014-07-06 23:13:09 |  cpg  | 
---------------------------------------------- 
2014-07-06 23:18:31 |  cpg  | 
---------------------------------------------- 

내가 '사용자'가 '시간'사이 분의 차이를 계산하는 데 도움이 필요합니다.

+0

http://stackoverflow.com/questions/5070111/difference-in-minutes-from-two-time-fields-in-mysql –

+0

는 기본 키가 있습니까? 그렇지 않다면 계산을 쉽게하기 위해 하나를 더하십시오. –

+0

@AbhikChakraborty 아마도, (시간, 사용자)는 기본 키입니다 !!! – Strawberry

답변

1
DROP TABLE IF EXISTS my_table; 

CREATE TABLE my_table 
(time DATETIME NOT NULL,user CHAR(3) NOT NULL,PRIMARY KEY(time,user)); 

INSERT INTO my_table VALUES 
('2014-07-06 23:00:42','ngm'), 
('2014-07-06 23:01:33','ngm'), 
('2014-07-06 23:02:41','cpg'), 
('2014-07-06 23:03:48','ngm'), 
('2014-07-06 23:13:09','cpg'), 
('2014-07-06 23:18:31','cpg'); 

mysql> SELECT * FROM my_table; 
+---------------------+------+ 
| time    | user | 
+---------------------+------+ 
| 2014-07-06 23:00:42 | ngm | 
| 2014-07-06 23:01:33 | ngm | 
| 2014-07-06 23:02:41 | cpg | 
| 2014-07-06 23:03:48 | ngm | 
| 2014-07-06 23:13:09 | cpg | 
| 2014-07-06 23:18:31 | cpg | 
+---------------------+------+ 

SELECT x.* 
     , COALESCE(
      SEC_TO_TIME(
      ROUND(TIME_TO_SEC(
       TIMEDIFF(x.time,MAX(y.time)) 
      )/60 
      )*60 
      ),0 
     ) my_interval -- <-- can probably make shorter 
    FROM my_table x 
    LEFT 
    JOIN my_table y 
    ON y.user = x.user 
    AND y.time < x.time 
    GROUP 
    BY time 
     , user; 
+---------------------+------+-------------+ 
| time    | user | my_interval | 
+---------------------+------+-------------+ 
| 2014-07-06 23:00:42 | ngm | 0   | 
| 2014-07-06 23:01:33 | ngm | 00:01:00 | 
| 2014-07-06 23:02:41 | cpg | 0   | 
| 2014-07-06 23:03:48 | ngm | 00:02:00 | 
| 2014-07-06 23:13:09 | cpg | 00:10:00 | 
| 2014-07-06 23:18:31 | cpg | 00:05:00 | 
+---------------------+------+-------------+ 
+0

+1 좋은 답변입니다. SEC_TO_TIME을 빨리 설명해 주시겠습니까? – Darren

+1

TIME_TO_SEC의 반대입니다 .-) – Strawberry

+0

고맙습니다 .-) – Darren

관련 문제