2017-07-16 2 views
0

J'essaye de trouver tout le bail qui ne tombe pas dans la période de location. La structure de mes tableaux sont les suivants:SQL - La plage de dates tombe entre la date donnée a sonné

Unité table Disponibilité:

 
Unit Key Start Date End Date Availability 
    1  1/1/2015  6/1/2015  1 
    1  6/2/2015 12/31/2015  0 
    1  1/1/2016 12/31/2016  1 
    2  1/1/2015  6/1/2015  1 
    2  6/2/2015 12/31/2015  0 

table de location:

 
Unit Key Lease Start Lease End 
    1  1/1/2015  6/1/2015 
    1  7/2/2015  8/2/2015 

Je cherche à écrire une logique pour déterminer tout le bail qui ne tomber dans la période de disponibilité. Dans ce cas, la deuxième ligne de la table de bail doit être la sortie.

Toutes sortes d'aide ou de suggestion seront très appréciées.

+0

Il est très impoli de publier une image au lieu de données d'échantillon au lieu de texte pour les données. Vous êtes nouveau, donc vous obtenez un laissez-passer, mais le texte nous permet de mettre en place un exemple de table pour nous assurer que nos réponses sont bonnes. –

+0

Merci, Joel, je n'étais pas sûr de savoir comment faire ça. Mais merci pour le montage. J'apprécie vraiment votre aide. – Ashwin

Répondre

0

Vous devez utiliser la déclaration NOT EXISTS:

SELECT * FROM LEASE L 
WHERE NOT EXISTS (SELECT * FROM AVAILABILITY A 
    WHERE A.UNIT_KEY = L.UNIT_KEY 
    AND A.AVAILABILITY = 1 
    AND A.START_DATE <= L.LEASE_START 
    AND A.END_DATE >= L.LEASE_END); 
0

Je devine que Availability = 0 signifie qu'il est pas disponible.

select distinct 
    Lease.* 
from 
    Lease 
    join UnitAvailability on 
    Lease.UnitKey = UnitAvailability.UnitKey 
    and Lease.LeaseStart <= UnitAvailability.EndDate 
    and Lease.LeaseEnd >= UnitAvailability.StartDate 
where 
    Availability = 0