2017-06-07 1 views
0

J'ai un tableau suivant avec des données en sql. Je voulais connaître les dates qui se chevauchent.Dates SQL Chevauchement

ARN NO  From Date To Date 
1 106739 1/1/2015 3/31/2015 
2 106739 1/1/2015 2/28/2015 
3 106739 3/1/2015 3/31/2015 
4 106739 5/1/2015 6/30/2015 
5 106739 7/1/2015 9/30/2015 
6 106739 9/1/2015 9/30/2015 
7 106739 10/1/2015 12/31/2015 
8 106739 10/1/2015 12/31/2015 

Dans le tableau ci-dessus, les trois premiers enregistrements se chevauchent. Comment écrire une requête pour le savoir? J'ai besoin de la sortie ci-dessous

NO ARN NO From Date To Date 
    4 106739 5/1/2015 6/30/2015 

Merci

+0

qu'en est-il des deux derniers? ils se chevauchent aussi bien. –

+0

Oui. Son chevauchement. J'ai édité la question. S'il vous plaît voir –

Répondre

2

Vous pouvez utiliser exists:

select t.* 
from t 
where exists (select 1 
       from t t2 
       where t2.arnno = t.arrno and 
        t2.fromdate < t.todate and 
        t2.todate > t.fromdate 
      ); 

Deux périodes se chevauchent si les premiers départs avant les secondes extrémités et se termine après la seconde commence.

+0

Je pense qu'il ya une certaine confusion à la fin de votre dernière phrase. «et se termine» - si nous insérons le sujet implicite prévu, je ne peux pas le faire fonctionner en substituant le «premier» ou le «second». –

+0

Oui. Vous avez raison –

+0

Vous devriez considérer une valeur de plus qui est unique à chaque rangée. Pour mon cas c'est un identifiant de liste de paiement, que je n'ai pas listé dans la question –