2016-05-24 9 views
0

Ich versuche nur die TNs auszuwählen, die auf die Tage zwischen Eff_date und end_date basierend schlechte Daten hat. Ich versuche die schlechten Daten herauszufiltern. Dies ist, was ich habe:Overlap Datum Oracle SQL

TN   EFF_DATE  END_DATE 
3097402606 12/4/2007 1/23/2011 23:59 
3097402606 12/4/2007 12/31/2099 
4054631308 6/15/2005 2/25/2008 23:59 
4054631308 5/9/2008 7/14/2009 23:59 
4054631308 5/9/2008 12/31/2099 
5745378900 4/10/2012 5/21/2012 23:59 
5745378900 2/4/2016 12/31/2099 
7062329778 12/16/2008 10/27/2009 23:59 
7062329778 10/28/2009 11/10/2009 23:59 
7062329778 10/28/2009 12/31/2099 

Aber ich muss nur diese Daten auswählen, die BAD ist. Es gibt eine Beziehung zwischen EFF_DATE und END_DATE.

TN   EFF_DATE  END_DATE 
4054631308  6/15/2005  2/25/2008 23:59 
4054631308  5/9/2008  7/14/2009 23:59 
**4054631308  5/9/2008  12/31/2099** 

7062329778  12/16/2008 10/27/2009 23:59 
7062329778  10/28/2009 11/10/2009 23:59 
**7062329778  10/28/2009 12/31/2099** 

Wie Sie sehen können, wiederholt sich EFF_DATE für die TNs. Sobald das END_DATE am 14.07.2009 für 4054631308 bestätigt wurde, kann das EFF_DATE nicht 5/9/2008 sein, entweder kann es 15.07.2009 sein oder es muss nicht dort sein, aber das muss ich etwas zeigen es zu meinem Team. Ich muss nur die Daten auswählen, die so aussehen, damit ich dem Team meinen Prozess erklären kann.

Ich habe verschiedene Möglichkeiten in Oracle SQL versucht, aber noch keinen Erfolg. Vielen Dank im Voraus für die Hilfe

+0

Was meinst du mit „hat eine Überlappung Datum zwischen' eff_date' und 'end_date'“? Können Sie Ihre Frage bitte bearbeiten und weitere Einzelheiten angeben? –

+1

Können Sie die Regel noch einmal erklären - warum sind einige Zeilen ausgewählt und manche nicht? Sie haben gesagt: "Das Datum der Überschneidung liegt zwischen eff_date und end_date" - was bedeutet das? Sehen Sie sich Ihre "gewünschte Ausgabe" an - welche Überlappung gibt es für die Daten der ERSTEN REIHE und alles andere? Außerdem zeigen die ersten beiden Zeilen aus den Eingabedaten eine Überschneidung, aber Sie wählen sie nicht aus - warum? – mathguy

+0

Obwohl ich Ihre Frage noch nicht vollständig verstanden habe, glaube ich, dass das Ergebnis die analytischen Funktionen 'LEAD' und' LAG' beinhalten wird, die durch 'tn' partitioniert werden. –

Antwort

1

Für Überschneidungen von Zeitperioden, können Sie exists verwenden:

select t.* 
from t 
where exists (select 1 
       from t t2 
       where t2.tn = t.tn and 
        t2.eff_date < t.end_date and 
        t2.end_date > t.eff_date 
      ); 

EDIT:

Oh, ich sehe, Sie alle TN Reihen, nicht nur diejenigen mit die Überlappungen. In diesem Fall verwendet eine Methode in:

select t.* 
from t 
where t.tn in (select t.tn 
       from t 
       where exists (select 1 
          from t t2 
          where t2.tn = t.tn and 
            t2.eff_date < t.end_date and 
            t2.end_date > t.eff_date 
       ); 
+0

wählen t. * von t wo t.tn in (t.tn von t wählen, wo vorhanden (1 wählen von t t2 wo t2.tn = t.tn und t2.eff_date t.eff_date ) und tn in ('3097402606') wenn ich diese gute TN stelle es immer noch auf, ich habe erwartet, zurück zu sein nichts, aber es gab mir immer noch die Zeilen. –

+0

wählen t. * von t wo t.tn in (wählen Sie t.tn von t wo existiert (wählen Sie 1 von t t2 wo t2.tn = t.tn und t2.eff_date t.eff_date ); und tn in ('5745378900') wenn ich diese gute TN stelle es immer noch auf, ich hatte erwartet, dass nichts zurück, aber es gab mir immer noch die Zeilen. –