Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql建模范围_Postgresql - Fatal编程技术网

Postgresql建模范围

Postgresql建模范围,postgresql,Postgresql,我希望对一组提供各种服务的用户进行建模,这些服务需要花费不同的时间,并希望在Postgresql支持的相对较新的范围日期类型的基础上进行构建,以使事情变得更干净 Bookings: user_id|integer time|tsrange service_id|integer Services: user_id|integer time_required|integer #in hours Users: id|integer 服务因用户而异,有些可能相同,但一个用户需要2小时,

我希望对一组提供各种服务的用户进行建模,这些服务需要花费不同的时间,并希望在Postgresql支持的相对较新的范围日期类型的基础上进行构建,以使事情变得更干净

Bookings:
 user_id|integer
 time|tsrange
 service_id|integer

Services:
 user_id|integer
 time_required|integer #in hours

Users:
 id|integer
服务因用户而异,有些可能相同,但一个用户需要2小时,另一个用户只需1小时

搜索在给定时间段内或不在给定时间段内发生的预订很容易。我很难弄清楚如何最好地让所有在某一天有时间的用户执行一项或多项服务

我想我需要找到他们预定范围的倒数,在给定的一天早上6点/晚上8点之间,然后看看这个范围内的最大范围是否适合他们最小的服务,但我想不出在SQL中如何表达这一点


是否可以对范围进行反转,或者它们是一种更好的方法?

问题并不完全清楚,但如果我没有弄错的话,您可以使用lead()或lag()窗口函数来计算可用的时间段。如果是这样,这将使您走上正确的道路:

select bookings.*, lead("time") over (order by "time") as next_booking_time
from bookings

问题并不完全清楚,但如果我没有弄错,您可以使用lead()或lag()窗口函数来计算可用的时间段。如果是这样,这将使您走上正确的道路:

select bookings.*, lead("time") over (order by "time") as next_booking_time
from bookings

对于需要的时间,使用间隔可能是更好的数据类型。对于需要的时间,使用间隔可能是更好的数据类型。