2013-04-29 2 views
0

Мне нужно выбрать и сравнить последнюю рекламируемую дату в объявлении, любые нулевые значения в аренде, чтобы получить, когда не арендуемое имущество и когда оно было объявлено в последний раз. Это код, который у меня есть до сих пор;Oracle SQL, выберите и сравните даты с нулевыми значениями

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

Я думаю, вам нужно сначала определить, не сданный внаем недвижимости. Оттуда вы можете найти самую последнюю дату объявления. Предполагая, что некоторые свойства никогда не были рекламированы, вам нужно пройти через 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; 
Смежные вопросы