我正在寻找一种方法来获得两个记录(可能多次)的时间,如果它们大于n次;我的例子我正在寻找超过5分钟的差异。
例如:
+------+---------+---------------------+
| id | number | created_at |
+------+---------+---------------------+
| 1768 | 3709529 | 2017-04-06 19:13:54 |
| 1772 | 3709530 | 2017-04-06 19:14:38 |
| 1780 | 3709531 | 2017-04-06 19:16:29 |
| 1783 | 3709532 | 2017-04-06 19:17:13 |
| 1787 | 3709533 | 2017-04-06 19:18:04 |
| 1793 | 3709534 | 2017-04-06 19:18:59 |
| 1800 | 3709535 | 2017-04-06 19:20:20 | << This Would be a record with
| 1808 | 3709536 | 2017-04-06 19:45:59 | << more then 5 min difference
| 1809 | 3709537 | 2017-04-06 19:46:59 |
| 1816 | 3709538 | 2017-04-06 19:48:17 |
| 1831 | 3709540 | 2017-04-06 19:52:05 |
| 1835 | 3709539 | 2017-04-06 19:52:53 |
| 1839 | 3709541 | 2017-04-06 19:53:36 |
| 1842 | 3709542 | 2017-04-06 19:54:07 |
| 1846 | 3709543 | 2017-04-06 19:54:52 |
| 1849 | 3709544 | 2017-04-06 19:55:25 |
| 1853 | 3709545 | 2017-04-06 19:56:13 |
| 1859 | 3709546 | 2017-04-06 19:57:09 |
| 1863 | 3709547 | 2017-04-06 19:58:01 |
| 1869 | 3709548 | 2017-04-06 19:59:23 |
+------+---------+---------------------+
20 rows in set (0.00 sec)
所以我需要基于开始和结束DateTime Select指令的一些值如下:
3709536 | 25 (or 00:25:00)
有没有办法实现这个目标?
可能有多个结果
非常感谢
答案 0 :(得分:0)
假设时间不是很大,您可以使用timediff()
:
select t.*,
timediff(created_at, prev_created_at) as time_diff
from (select t.*,
(select t2.created_at
from t t2
where t2.created_at < t.created_at
order by t2.created_at desc
limit 1
) prev_created_at
from t
) t
where prev_created_at < t.created_at - interval 5 minute;
答案 1 :(得分:0)
E.g:
SELECT x.*
, TIMEDIFF(x.created_at,MAX(y.created_at)) diff
FROM my_table x
JOIN my_table y
ON y.created_at < x.created_at
GROUP
BY x.id
HAVING x.created_at > MAX(y.created_at) + INTERVAL 5 MINUTE;
...或...
SELECT id
, number
, created_at
, i
FROM
( SELECT x.*
, @i:=timediff(@prev,created_at) i
, @prev:=created_at
FROM my_table x
, ( SELECT @i:=null,@prev:=null ) vars
ORDER
BY created_at desc
) a
WHERE TIME_TO_SEC(i) > 300
ORDER
BY created_at;