我正在尝试GROUP BY
相同的记录,但timestamp
或datetime
不同。
从第一次进入开始,时间差异仅为3分钟。
示例:
这就是数据库表的样子。
*-------------------------------------------*
| id | name | time |
| 1 | Lei | 2018-02-21 12:00:10 |
| 2 | Lei | 2018-02-21 12:01:11 |
| 3 | Lei | 2018-02-21 12:01:15 |
| 4 | Lei | 2018-02-21 12:01:16 |
| 5 | Anna | 2018-02-21 12:03:11 |
| 6 | Anna | 2018-02-21 12:03:13 |
| 7 | Bell | 2018-02-21 12:05:01 |
| 8 | Lei | 2018-02-21 12:10:00 |
*-------------------------------------------*
我想让雷的入场时间从她的第一个timestamp
或datetime
记录的12:00:10到3分钟。
所以输出就是这样。
*-------------------------------------------*
| id | name | time |
| 1 | Lei | 2018-02-21 12:00:10 |
| 5 | Anna | 2018-02-21 12:03:11 |
| 7 | Bell | 2018-02-21 12:05:01 |
| 8 | Lei | 2018-02-21 12:10:00 |
*-------------------------------------------*
我很乐意感谢你的帮助,mysql或php。
答案 0 :(得分:0)
根据您的示例数据,您根本不需要考虑时间戳:
select (@rn := @rn + 1) as id, name, min(time) as time
from t cross join
(select @rn := 0) params
group by id, name;
从间隔中的第一个记录开始按三分钟间隔对事物进行分组要困难得多。这需要变量或递归CTE。
答案 1 :(得分:0)
MySQL 5.6架构设置:
Array
(
[radios1] => Array
(
[0] => on
)
[from] => Array
(
[0] => Bangalore
)
)
查询1 :
CREATE TABLE Table1
(`id` int, `name` varchar(4), `time` datetime)
;
INSERT INTO Table1
(`id`, `name`, `time`)
VALUES
(1, 'Lei', '2018-02-21 12:00:10'),
(2, 'Lei', '2018-02-21 12:01:11'),
(3, 'Lei', '2018-02-21 12:01:15'),
(4, 'Lei', '2018-02-21 12:01:16'),
(5, 'Anna', '2018-02-21 12:03:11'),
(6, 'Anna', '2018-02-21 12:03:13'),
(7, 'Bell', '2018-02-21 12:05:01')
;
<强> Results 强>:
select id, name, min(time) as time
from Table1
group by name
order by time
或者如果您想按时间间隔分组3分钟,您可以这样做
| id | name | time |
|----|------|----------------------|
| 1 | Lei | 2018-02-21T12:00:10Z |
| 5 | Anna | 2018-02-21T12:03:11Z |
| 7 | Bell | 2018-02-21T12:05:01Z |
答案 2 :(得分:0)
看起来你需要这样的东西:
select *
from mytable t
where not exists (
select *
from mytable t1
where t1.name = t.name
and t1.id <> t.id
and t1.time >= t.time - interval 3 minute
and t1.time < t.time
);
演示:http://sqlfiddle.com/#!9/03cf16/1
只有在三个时间间隔内不存在具有相同name
的行时,才会选择行。