mysql - MYSQL - 如何在同一张表上减去两个不同行上的两列?
问题描述
我有一个选择 taht 带来的结果是这样的:
+-----------+------------+--------------+
| parking_id| start_time | end_time |
+-----------+------------+--------------+
| 38 | 09:15:00 | 10:32:00 |
| 57 | 11:45:00 | 13:21:00 |
| 33 | 14:40:00 | 16:35:00 |
| 15 | 17:13:00 | 19:15:00 |
| 68 | 20:54:00 | NULL |
+-----------+------------+--------------+
正如您所看到的,ID 不遵循线性顺序,但我真正需要的是一个选择,它为我带来最后插入的新start_time和end_time之间的时间,它遵循这个非线性顺序,所以我需要一个带来我这个:
+-----------+------------+--------------+----------------+
| parking_id| start_time | end_time | time_btw_parks |
+-----------+------------+--------------+----------------+
| 38 | 09:15:00 | 10:32:00 | NULL |
| 57 | 11:45:00 | 13:21:00 | 01:13:00 |
| 33 | 14:40:00 | 16:35:00 | 01:19:00 |
| 15 | 17:13:00 | 19:15:00 | 00:38:00 |
| 68 | 20:54:00 | NULL | 01:39:00 |
+-----------+------------+--------------+----------------+
不一定非要选择查询。任何解决它的方法都会有所帮助。
解决方案
对于此示例数据,您可以使用timediff()
函数:
select t.parking_id, t.start_time, t.end_time,
timediff(t.start_time, max(tt.end_time)) time_btw_parks
from tablename t left join tablename tt
on t.start_time > tt.end_time
group by t.parking_id, t.start_time, t.end_time
order by t.start_time
请参阅演示。
结果:
| parking_id | start_time | end_time | time_btw_parks |
| ---------- | ---------- | -------- | -------------- |
| 38 | 09:15:00 | 10:32:00 | |
| 57 | 11:45:00 | 13:21:00 | 01:13:00 |
| 33 | 14:40:00 | 16:35:00 | 01:19:00 |
| 15 | 17:13:00 | 19:15:00 | 00:38:00 |
| 68 | 20:54:00 | | 01:39:00 |
推荐阅读
- python - 从现有的装饰器创建一个新的装饰器
- android - SQLite 外键约束失败(代码 787) - Android Room
- powershell - 如何在 powershell 脚本中选择数组类型的数据?
- javascript - 带有 React.js 的 Bootstrap-Native
- javascript - 更改数组的数据格式并删除键/值对
- java - 有效地将一行添加到现有 Excel 文件中
- jenkins - 如果其中一个存储库发生更改,则轮询多个存储库并触发构建
- jmeter - 如何生成一个日志文件,其中包含在 JMeter 脚本中执行的采样器的结果
- angular - 如何根据角度条件更改按钮颜色和状态?
- vb.net - VB NET 中的自动登录失败