Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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数据库中有一个property\u calendars表,每个属性都有一个每行一天的结构。以下是一个月的csv属性示例数据: "id","property_id","status","price","currency","date","note","created_at","updated_at" 30053752,56,"booked",170,"GBP","2017-10-01",,"2018-04-19 04:04:48","2018-04-19 04:04:48"

我在postgreSQL数据库中有一个
property\u calendars
表,每个属性都有一个每行一天的结构。以下是一个月的csv属性示例数据:

"id","property_id","status","price","currency","date","note","created_at","updated_at"
30053752,56,"booked",170,"GBP","2017-10-01",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053753,56,"booked",286,"GBP","2017-10-02",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053754,56,"booked",271,"GBP","2017-10-03",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053755,56,"booked",263,"GBP","2017-10-04",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053756,56,"booked",278,"GBP","2017-10-05",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053757,56,"booked",284,"GBP","2017-10-06",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053758,56,"booked",252,"GBP","2017-10-07",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053759,56,"booked",254,"GBP","2017-10-08",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053760,56,"available",247,"GBP","2017-10-09",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053761,56,"booked",170,"GBP","2017-10-10",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053762,56,"booked",170,"GBP","2017-10-11",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053763,56,"booked",170,"GBP","2017-10-12",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053764,56,"booked",170,"GBP","2017-10-13",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053765,56,"booked",170,"GBP","2017-10-14",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053766,56,"booked",170,"GBP","2017-10-15",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053767,56,"booked",170,"GBP","2017-10-16",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053768,56,"unavailable",170,"GBP","2017-10-17",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053769,56,"unavailable",170,"GBP","2017-10-18",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053770,56,"unavailable",170,"GBP","2017-10-19",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053771,56,"booked",170,"GBP","2017-10-20",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053772,56,"booked",170,"GBP","2017-10-21",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053773,56,"booked",170,"GBP","2017-10-22",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053774,56,"booked",170,"GBP","2017-10-23",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053775,56,"booked",170,"GBP","2017-10-24",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053776,56,"booked",170,"GBP","2017-10-25",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053777,56,"booked",170,"GBP","2017-10-26",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053778,56,"booked",170,"GBP","2017-10-27",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053779,56,"booked",170,"GBP","2017-10-28",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053780,56,"available",170,"GBP","2017-10-29",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053781,56,"booked",170,"GBP","2017-10-30",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
30053782,56,"booked",170,"GBP","2017-10-31",,"2018-04-19 04:04:48","2018-04-19 04:04:48"
在这样的表上查询给定时间段的占用率的最佳方法是什么?在这种情况下,计算占用率的公式是:
x=(n-u)/n*100

n = total nights 
u = unavailable nights
b = booked nights
x = occupancy

在上述数据中,
26/31*100=87.83%
当月入住率

您可以使用带有条件的
计数
,然后根据您的公式计算入住率(注意:正确的公式似乎是
b/(n-u)*100
,它给出了
83.87%

从PostgreSQL 9.4开始,您还可以使用
COUNT(*)过滤器(…)
子句:

SELECT 
  COUNT(*) FILTER (WHERE status = 'booked') b 
  ...
FROM occupancy

显示示例数据和预期结果。只有文本格式,请不要图片。获得入住率的公式是什么?很多人不知道占用率是什么意思。你真的不需要这些字符串的
E
前缀。谢谢@Dan和Kaushik-我已经更新了问题,使其更加明确,并包括示例data@eurotrash-粘贴数据而不是感谢-实际上,此用例中的入住率需要表示为可用夜晚的百分比(总夜数-不可用夜数)好的,我已将公式更新为
b*100.0/(n-u)
。我希望它是正确的。这是一个很好的解决方案。谢谢。
SELECT 
  COUNT(*) FILTER (WHERE status = 'booked') b 
  ...
FROM occupancy