我已经尝试创建以下SQL查询(PostgreSQL 12.14)好几天了,但我无法弄清楚。
查询应该计算两个时间戳之间的持续时间(以小时为单位),但只计算属于工作日的小时数。
示例:
创建日期:2023年4月27日14:00:00 NOW()= 2023年5月2日- 08:00:00
正确的结果应为66小时:27.04 = 10 h(从14:00到00:00)28.04 = 24 h 29.04 = 0 h(星期六)30.04 = 0 h(星期日)01.05 = 24 h 02.05 = 8h(从00:00到08:00)
谢谢你的帮助迈克尔
1条答案
按热度按时间mkshixfv1#
如果我理解你想要正确的以下给出它。您正在查找几个时间间隔内的
sum
小时数。这些间隔被定义为start
时间戳和当天结束之间、end
的当天开始和当天该时间的实际时间之间、以及start
和end
日期之间每天24小时的间隔;不包括星期六和星期天。(参见demo)查询首先创建2个CTE。each_day CTE使用
generate series
函数扩展开始日期和结束日期,包括它们之间的日期。第二个CTEhours_per_day
是真实的的主力。它确定日期是期间的第一天还是最后一天。对于每一天,它计算这些天的适当间隔(减去时间戳得到间隔),并且对于中间天,创建24小时(1天)的间隔。此外,它还取消了星期六和星期日。最后,主查询计算这些时间间隔的sum
并提取小时数。