mysql - 当开始和结束在不同的行和列中时,组合不同 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 |
+---------+---------------------+---------------------+
提前致谢。
解决方案
使用聚合和分组依据
select user_id, min(start) as start, max(end) as end
from tablename
group by user_id
推荐阅读
- c - 为所有函数设置 GCC 默认属性(让所有函数符号对猴子补丁来说都是弱的)
- c# - 通知已在 WPF 中的 UserControl 中选择了 RadioButton
- vba - 访问 VBA 文本框矩阵
- node.js - 错误:Nodejs keytar.node 不是有效的 Win32 应用程序
- javascript - IPFS 不是构造函数:Nodejs - IPFS/OrbitDB 聊天室
- java - Java:Runtime.getRuntime().exec() 系统调用错误/失败
- javascript - ExcelJS冻结行
- javascript - 密码检查器显示解锁(0,0,0)但不显示给定数字(密码)
- r - 提取独特的流派及其计数并使用索引键存储在数据框中
- python-3.x - 使用 Xpath 单击带有 selenium 的按钮不起作用