我想知道你是否可以给我一些想法来计算同一场地不同时间之间的最大间隔。
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”,我想知道第一到第二和第二到第三和第三到第四的不同时间。一旦我有这个,我会采取最大间隔。
我会帮助你。
谢谢!
答案 0 :(得分:1)
E.g:
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)
答案 1 :(得分: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
的第一个参数定义是否以秒,分,小时等输出差异。
答案 2 :(得分: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