我正在用PostgreSQL9.1创建一个数据库,给出的表如下:
CREATE TABLE rooms(
room_number int,
property_id int,
type character varying,
PRIMARY KEY (room_number, property_id)
);
Insert into rooms values (1,1,double),(2,1,double),(3,1,triple)
CREATE TABLE reservations(
reservation_ID int,
property_id int,
arrival date,
departure date,
room_num int,
PRIMARY KEY(reservation_ID,property_id)
FOREIGN KEY (room_number, property_id)
);
INSERT INTO orders VALUES (1,1,2013-9-27,2013-9-30,1),
(2,1,2013-9-27,2013-9-28,2),
(3,1,2013-9-29,2013-9-30,3);我想给出两个日期和检查之间的可用性。因此,在第一栏应加上:
所以我的结果,考虑到2013-9-27和2013-9-30作为输入,一定是这样的:

发布于 2013-11-29 06:34:06
我认为最好的解决方案是同时使用generate_series()和交叉表()来创建一个动态表。此外,您可以使用从CTE到数据表的左联接,从而获得更好的信息。类似于:
WITH daterange as (
SELECT s::date as day FROM generate_series(?, ?, '1 day')
)
SELECT dr.day, sum(case when r.type = 'double' then r.qty else 0) as room_double,
sum(case when r.type = 'triple' then r.qty else 0) as room_triple....
);但是请注意,交叉表将使第二个查询更容易一些。
https://stackoverflow.com/questions/18958734
复制相似问题