我有一个简单的问题,但是我很难尝试制定适当的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
如何修改查询以从给定日期选择最小开始和最大结束?
您已对进行分组DAY()
,这可能是不正确的。您只显示2014年3月的数据,但是如果您的数据库实际具有的月份/年份的数据不止于此,则您将对togher 2014/03 / 03、2014 / 02 / 03、2013 / 02/03等进行分组..(不同的年/月,同一天)
您应该这样做GROUP BY DATE(start)
,因此可以对完整YYYY-MM-DD
日期值进行分组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句