Oracle SQL,根据空值选择和比较日期

时间:2013-04-29 08:34:17

标签: sql database oracle

我需要选择并比较广告中的最后一个广告日期,以及租赁时的任何空值,以获取未租赁的房产及上次广告的时间。这是我到目前为止的代码;

SELECT YR_LEASE.PROPERTYNUM, 
       MAX(YR_ADVERT.DATETO),
 count(YR_LEASE.RENTERNUM)      
FROM YR_LEASE
JOIN YR_ADVERT
    ON YR_LEASE.PROPERTYNUM=YR_ADVERT.PROPERTYNUM
GROUP BY YR_LEASE.PROPERTYNUM

这会返回一个太高的计数而且我不确定我做错了什么,这是我的ERD尝试给这个问题一些背景;

http://www.gliffy.com/pubdoc/4239520/L.png

1 个答案:

答案 0 :(得分:1)

我认为您需要首先确定未发布的属性。从那里你可以找到最新的广告日期。假设某些属性从未被宣传过,您需要通过YR_PROPERTY进行并进行左连接以包含未公布的属性。

SELECT NVL(TO_CHAR(MAX(YR_ADVERT.DATETO),'DD/MM/YYYY'),'NO LAST ADVERT DATE') LAST_ADVERT_DATE
      ,YR_PROPERTY.PROPERTYNUM      
FROM YR_PROPERTY LEFT JOIN YR_ADVERT ON YR_PROPERTY.PROPERTYNUM = YR_ADVERT.PROPERTYNUM
WHERE NOT EXISTS (SELECT 1
                  FROM  YR_LEASE 
                  WHERE YR_LEASE.PROPERTYNUM = YR_PROPERTY.PROPERTYNUM
                  AND   YR_LEASE.RENT_FINISH > SYSDATE)
GROUP BY YR_LEASE.PROPERTYNUM;