【发布时间】:2014-03-11 21:46:10
【问题描述】:
我遇到了一个简单的问题,但是我很难尝试制定正确的 SQL 查询来完成这项工作。我有一张有多个日期的桌子。每个日期都有多次。时间是由用户手动添加的开始 - 结束增量。
+----+------------------+------------------+
| id | start | end |
+----+------------------+------------------+
| 6 | 2014/03/03 08:30 | 2014/03/03 09:00 |
| 7 | 2014/03/03 09:00 | 2014/03/03 11:15 |
| 8 | 2014/03/03 11:15 | 2014/03/03 11:45 |
| 9 | 2014/03/03 11:45 | 2014/03/03 12:45 |
| 10 | 2014/03/03 12:45 | 2014/03/03 13:15 |
| 11 | 2014/03/04 08:45 | 2014/03/04 09:00 |
| 12 | 2014/03/04 09:00 | 2014/03/04 13:00 |
| 13 | 2014/03/04 13:00 | 2014/03/04 13:30 |
| 14 | 2014/03/05 09:00 | 2014/03/05 09:30 |
| 15 | 2014/03/05 09:30 | 2014/03/05 12:30 |
| 16 | 2014/03/05 12:45 | 2014/03/05 12:45 |
| 19 | 2014/03/06 08:45 | 2014/03/06 09:00 |
| 20 | 2014/03/06 09:15 | 2014/03/06 10:00 |
我正在尝试计算每个日期的最早开始时间和最晚结束时间之间的小时差。
目前我只是在我的行上使用简单的unix_timestamp 转换,但是,它只计算找到的第一行之间的差异,而不是给定日期的所有行之间的差异。
select
unix_timestamp(min(start)) - unix_timestamp(max(end)) / 60.0 / 60.0 as hours_difference,
min(start) as started,
min(end) as ended
from
athlete_log
group by
day(start)
问题(如上所述)是它只抓取给定日期的第一行,例如:
| 6 | 2014/03/03 08:30 | 2014/03/03 09:00 |
但我需要最早开始时间和最晚开始时间:
| 6 | 2014/03/03 08:30 | 2014/03/03 09:00 |
| 7 | 2014/03/03 09:00 | 2014/03/03 11:15 |
| 8 | 2014/03/03 11:15 | 2014/03/03 11:45 |
| 9 | 2014/03/03 11:45 | 2014/03/03 12:45 |
| 10 | 2014/03/03 12:45 | 2014/03/03 13:15 |
应该产生的结果:
2014/03/03 8:30 - start
2014/03/03 13:15 - end
5.45 - hours_difference
当然只是选择
2014/03/03 8:30 - start
2014/03/03 9:00 - end
.30 - hours_difference
如何修改我的查询以选择给定日期的最小开始和最大结束?
【问题讨论】:
-
为什么要转换?你试过
timediff函数吗?