我有mysql 5.7.40 db表与简单的布局
| userid | datetime | ipaddress |
|--------|------------------|-----------|
| 1 | 25-11-2022 05:30 | 10.15.1.1 |
| 1 | 21-11-2022 05:30 | 10.15.1.1 |
| 2 | 22-11-2022 11:30 | 10.15.1.1 |
| 1 | 23-11-2022 22:30 | 10.15.1.1 |
| 2 | 25-11-2022 14:30 | 10.15.1.1 |
| 3 | 20-11-2022 18:30 | 10.15.1.1 |
| 3 | 23-11-2022 05:30 | 10.15.1.1 |
| 2 | 11-11-2022 09:30 | 10.15.1.1 |
| 1 | 22-11-2022 11:30 | 10.15.1.1 |
| 2 | 23-11-2022 13:30 | 10.15.1.1 |
| 2 | 08-11-2022 12:30 | 10.15.1.1 |
| 1 | 04-03-2022 11:30 | 10.15.1.1 |
| 3 | 25-11-2022 10:30 | 10.15.1.1 |
| 3 | 23-11-2022 15:30 | 10.15.1.1 |
我希望在一条记录中输出每个用户ID和每天的输出,显示开始时间和开始ipaddress和结束时间和结束ipaddress,使用mysql查询。
| userid | date | start ipaddress | start time | end ipaddress | end time |
|--------|------------|-----------------|------------|---------------|----------|
| 1 | 25-11-2022 | 10.15.1.1 | 05:30 | 10.15.1.1 | 14:30 |
| 1 | 26-11-2022 | 10.15.1.2 | 06:20 | 10.15.1.2 | 16:30 |
| 2 | 22-11-2022 | 10.15.1.4 | 10:21 | 10.15.1.3 | 12:30 |
| 3 | 23-11-2022 | 10.15.1.6 | 12:30 | 10.15.1.5 | 16:30 |
| 2 | 25-11-2022 | 10.15.1.3 | 07:45 | 10.15.1.3 | 15:30 |
| 3 | 21-11-2022 | 10.15.1.1 | 04:33 | 10.15.1.1 | 19:30 |
我试过使用self join和inner join,但没有成功,希望有人能帮助我找到一个直接的解决方案。另外,我还担心查询时间,因为这个表有数百万条记录。
- 请注意,以上示例中使用的数据并不一致,只是为了传达我想要实现的想法。*
感谢你的帮助,谢谢。
1条答案
按热度按时间vlf7wbxs1#
假设
datetime
实际上是一个datetime列,应该可以执行如下操作:这个想法是创建一个连接表到自己的视图,它已经按日期和开始和结束时间分组。你可以在这里阅读更多关于各种方法的信息:https://dev.mysql.com/doc/refman/5.7/en/example-maximum-column-group-row.html
不幸的是,你可能会像注解中提到的那样将
datetime
存储为varchar,这使得这一点有点棘手。你可能会通过使用str_to_date()
来实现上面的方法,但需要进行一些数据操作。