2017-08-29 59 views
0

我想知道您是否可以給我一些想法來計算同一字段中不同時間之間的最大間隔。計算同一字段不同時間之間的最大間隔MYSQL

id, npm, nama_mahasiswa, jurusan, fecha_hora 
1, CABRAL, 24, , 2017-08-25 15:27:12  
2, RUSSO, 6, , 2017-08-25 15:32:10 
3, CABRAL, 59, , 2017-08-25 15:34:15  
4, RUSSO, 54, , 2017-08-25 15:38:21  
5, CABRAL, 28, , 2017-08-25 15:38:47  
6, FERNANDEZ, 61, , 2017-08-25 15:39:03  
7, DUARTE, 56, , 2017-08-25 15:40:02  
8, DUARTE, 47, , 2017-08-25 15:40:29  
9, RUSSO, 69, , 2017-08-25 15:43:17  
10, CABRAL, 31, , 2017-08-25 15:43:35  
11, FERNANDEZ, 15, , 2017-08-25 15:48:14 

實施例,對於每個「CABRAL」我想知道,在第一至第二和第二到第三和第三到第四不同的時間。一旦我有這個我會採取最大間隔。

我會apreciate任何幫助。

謝謝!

回答

0

應該處理子查詢。

SELECT `id`, 
     `npm`, 
     (SELECT TIMESTAMPDIFF(SECOND, t1.`fecha_hora`, t2.`fecha_hora`) as `diff` 
     FROM table t2 
     ORDER BY `diff` DESC 
     LIMIT 1) as `max_interval` 
FROM table t1 

我假設你的表名是'table'。

TIMESTAMPDIFF第一個參數定義是否輸出秒,分鐘,小時,差異等

+0

您需要關於B.id =(A.id + 1)t1和t2 B之間 –

0

可能的工作,假設你想跟着ID的順序:

SELECT A.id, 
     A.fecha_hora, 
     TIMESTAMPDIFF(MINUTE,A.fecha_hora,B.fecha_hora) AS timediff 
FROM Table A 
INNER JOIN Table B 
    ON B.id = (A.id + 1) 
ORDER BY A.id ASC 
+1

'的連接'將連接錯誤的行 –

+0

的假設是patentl y false – Strawberry

1

例如:

DROP TABLE IF EXISTS my_table; 

CREATE TABLE my_table 
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
, npm VARCHAR(20) NOT NULL 
, jurusan INT NOT NULL 
, fecha_hora DATETIME NOT NULL 
); 

INSERT INTO my_table VALUES 
(1, 'CABRAL' , 24, '2017-08-25 15:27:12'), 
(2, 'RUSSO' , 6, '2017-08-25 15:32:10'), 
(3, 'CABRAL' , 59, '2017-08-25 15:34:15'), 
(4, 'RUSSO' , 54, '2017-08-25 15:38:21'), 
(5, 'CABRAL' , 28, '2017-08-25 15:38:47'), 
(6, 'FERNANDEZ', 61, '2017-08-25 15:39:03'), 
(7, 'DUARTE' , 56, '2017-08-25 15:40:02'), 
(8, 'DUARTE' , 47, '2017-08-25 15:40:29'), 
(9, 'RUSSO' , 69, '2017-08-25 15:43:17'), 
(10, 'CABRAL' , 31, '2017-08-25 15:43:35'), 
(11, 'FERNANDEZ', 15, '2017-08-25 15:48:14'); 

SELECT npm 
    , MAX(diff) max_interval 
    FROM 
    (SELECT x.* 
      , TIMEDIFF(x.fecha_hora,MAX(y.fecha_hora)) diff 
     FROM my_table x 
     JOIN my_table y 
      ON y.npm = x.npm 
      AND y.fecha_hora < x.fecha_hora 
     GROUP 
      BY x.npm 
      , x.fecha_hora 
    ) a 
GROUP 
    BY npm; 
+-----------+--------------+ 
| npm  | max_interval | 
+-----------+--------------+ 
| CABRAL | 00:07:03  | 
| DUARTE | 00:00:27  | 
| FERNANDEZ | 00:09:11  | 
| RUSSO  | 00:06:11  | 
+-----------+--------------+ 
4 rows in set (0.00 sec) 
+0

OP應該考慮使用'LEFT JOIN'來處理那些'npm'沒有配對來計算間隔。 –

+0

它適用於我,但使用MIN而不是MAX!由於我在這裏發佈的記錄適用於max,但fecha_hora記錄太多,並且當我嘗試應用MAX時無法正常工作!謝謝! –

+0

@JonathanRojas好的,但是這個評論很荒唐! – Strawberry

相關問題