我有一张表,其中一个人有几行不同的 session ,并带有开始日期和结束日期。第一行中的结束日期可以与下一行中的开始日期相同,因此我想将它们合并到一行中,因为 session 实际上仍在继续。我使用 MySQL,但版本 5.7 和升级以使用更高版本是不可能的。
这是我所拥有的示例:****编辑同一用户有多个 session 的示例:
create table dates (USER_ID varchar(100),
start datetime,
end datetime);
insert into dates values ('1','2014-06-01','2014-07-01');
insert into dates values ('1','2014-07-01','2014-08-01');
insert into dates values ('1','2014-08-01','2014-09-01');
insert into dates values ('2','2014-07-01','2014-08-01');
insert into dates values ('2','2014-08-01','2014-09-01');
insert into dates values ('2','2014-10-01','2014-11-01');
+---------+---------------------+---------------------+
| USER_ID | start | end |
+---------+---------------------+---------------------+
| 1 | 2014-06-01 00:00:00 | 2014-07-01 00:00:00 |
| 1 | 2014-07-01 00:00:00 | 2014-08-01 00:00:00 |
| 1 | 2014-08-01 00:00:00 | 2014-09-01 00:00:00 |
| 2 | 2014-07-01 00:00:00 | 2014-08-01 00:00:00 |
| 2 | 2014-08-01 00:00:00 | 2014-09-01 00:00:00 |
| 2 | 2014-10-01 00:00:00 | 2014-11-01 00:00:00 |
+---------+---------------------+---------------------+
这就是我想要的,而不仅仅是每个 USER_ID 的最小/最大日期
+---------+---------------------+---------------------+
| USER_ID | start | end |
+---------+---------------------+---------------------+
| 1 | 2014-06-01 00:00:00 | 2014-09-01 00:00:00 |
| 2 | 2014-07-01 00:00:00 | 2014-09-01 00:00:00 |
| 2 | 2014-10-01 00:00:00 | 2014-11-01 00:00:00 |
+---------+---------------------+---------------------+
提前致谢。
最佳答案
使用聚合和分组依据
select user_id, min(start) as start, max(end) as end
from tablename
group by user_id
关于mysql - 当开始和结束位于不同的行和列时,合并不同 ID 的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58218655/