首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL数据库查询显示额外日期

SQL数据库查询显示额外日期
EN

Stack Overflow用户
提问于 2013-09-23 12:01:17
回答 1查看 75关注 0票数 0

我正在用PostgreSQL9.1创建一个数据库,给出的表如下:

代码语言:javascript
复制
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);

我想给出两个日期和检查之间的可用性。因此,在第一栏应加上:

  1. 在给定的和
  2. 为每种类型的房间增加一列,显示可用性。

所以我的结果,考虑到2013-9-27和2013-9-30作为输入,一定是这样的:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-29 06:34:06

我认为最好的解决方案是同时使用generate_series()和交叉表()来创建一个动态表。此外,您可以使用从CTE到数据表的左联接,从而获得更好的信息。类似于:

代码语言:javascript
复制
 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....
 );

但是请注意,交叉表将使第二个查询更容易一些。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18958734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档