如何将平均时间值转为整数并将时长向上取整为天数(如72天32h转73)
问题需求
需要将SQL查询结果中的平均时间值转换为整数,且包含小时的时长需向上取整为天数(例如72 days 32:01:52.694268转换为73)。
原始查询SQL
select day_of_week, avg(booking_time) from(SELECT check_in_date - booked_at as booking_time, EXTRACT (dow FROM check_in_date)day_of_week FROM bookings ) as table1 where EXTRACT(epoch FROM booking_time)/3600 > 0 group by day_of_week order by avg(booking_time) desc;
原始查询输出
| day_of_week | avg |
|---|---|
| 4.0 | 72 days 32:01:52.694268 |
| 5.0 | 57 days 34:00:09.228322 |
| 3.0 | 50 days 26:30:19.840091 |
| 6.0 | 41 days 33:12:01.010234 |
| 0.0 | 36 days 14:35:36.59173 |
| 2.0 | 34 days 28:15:35.384787 |
| 1.0 | 31 days 10:52:57.718717 |
解决方案
通过EXTRACT(epoch ...)将平均时间间隔转换为总秒数,再除以一天的秒数(3600*24)得到带小数的天数,最后用ceil()函数向上取整即可实现需求。修改后的SQL如下:
select day_of_week, ceil(EXTRACT(epoch FROM avg(booking_time)) / (3600 * 24)) as avg_booking_days from( SELECT check_in_date - booked_at as booking_time, EXTRACT(dow FROM check_in_date) as day_of_week FROM bookings ) as table1 where EXTRACT(epoch FROM booking_time)/3600 > 0 group by day_of_week order by avg_booking_days desc;
处理后预期输出
| day_of_week | avg_booking_days |
|---|---|
| 4.0 | 73 |
| 5.0 | 59 |
| 3.0 | 52 |
| 6.0 | 43 |
| 0.0 | 37 |
| 2.0 | 36 |
| 1.0 | 32 |
内容的提问来源于stack exchange,提问作者vikwillberg
相关产品推荐
相关产品推荐

