日期:2014-05-17  浏览次数:20801 次

复杂SQL求教
两张表:租赁合同表和房产表,根据输入时间动态查询租赁的情况
注意:合同并不是连续签约的,因此同一个房产的两个合同可能有间隔时间。
PACT表(房产编号、合同号、开始日期、结束日期)
House_no  Pact_no  Startdata Enddata
101 P1 2010-08-21 2011-08-31
101 P2 2011-10-01 2012-09-31
102 P3 2011-09-01 2013-08-31
102 P4 2013-09-01 2014-08-31
103 P5 2010-05-01 2011-04-30

House表(房产编号、面积)
House_no Rentarea
101 100
102 80
103 120
104 130

根据提示输入日期,分3个查询,分别查询出签约面积、空置面积、到期未退场面积
比如输入2011-09-15
则签约情况是:(只要输入的时间在签约时间内,则该套房子则为签约房产,统计其面积)
House_no Rentarea
102 80

则空置情况是:(输入时间小于签约开始日期或者还未签约的房产)
House_no Rentarea
101 100
104 130

则到期未退场面积:(输入时间大于最新合同的结束日期)
House_no Rentarea
103 120
SQL

------解决方案--------------------
select house_no, rentarea from house
    where house.house_no in     ( select house_no from pact
                                      where      pact.startdata <= v_query_date
                                             and pact.enddata   >= v_query_date );

select house_no, rentarea from house
    where house.house_no not in ( select house_no from pact
                                      where      pact.startdata <= v_query_date
                                             and pact.enddata   >= v_query_date );