首页 > 解决方案 > 当开始和结束在不同的行和列中时,组合不同 id 的日期

问题描述

我有一张桌子,其中一个人有几行不同的会话,其中包含开始日期和结束日期。第一行的结束日期可以与下一行的开始日期相同,因此我想将它们组合成一行,因为会话实际上仍在继续。我正在使用 MySQL,但版本 5.7 和升级到使用更高版本是不可能的。

这是我所拥有的一个例子:****编辑同一个用户有多个会话的例子:

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 |
+---------+---------------------+---------------------+

提前致谢。

标签: mysqlsqldatedate-difference

解决方案


使用聚合和分组依据

select user_id, min(start) as start, max(end) as end
from tablename
group by user_id

推荐阅读