2016-07-04 6 views
0

ich eine Tabelle mit folgenden Spalten: Konto, Indikator, Startdate, EndDate Indikator ändert sich jeder so oft (zufällig) von N auf Y. Wenn Indikator Aktuelles Datum Änderungen beginnen, so hat Enddatum. Startdatum und Enddatum können sich aufgrund von Änderungen in anderen Flags in dieser Tabelle ändern, daher wurde Indikator möglicherweise nicht aktualisiert, aber Start- und Enddatum haben sich erledigt.SQL Datensätze Isolieren von Aktualisierungsdaten Treffen Kriterien

Ich versuche, alle Konten Datensätze mit SQL zu isolieren, wo der Indikator von Y bis N im Leben des Kontos gegangen ist, wie dies nie

Jede Hilfe willkommen

Dank

passieren soll
+0

Ich kämpfe, um zu sehen, dass Sie mit einer Abfrage könnte das tun. Vielleicht könnten Sie einen Trigger hinzufügen, der einer Archivtabelle Zeilen hinzufügt, damit Sie dann den Vergleich mit den aktuellen Werten abfragen können? Oder berücksichtigen Sie Einschränkungen, um dies zu verhindern? – saml

+0

Ich bekomme nicht, was Sie wollen, können Sie einige Beispielzeilen und erwartetes Ergebnis hinzufügen? – dnoeth

Antwort

0

Ich denke, was Sie versuchen, ist Spitze bis zum nächsten Datensatz, um zu sehen, ob sich der Indikator geändert hat. Wenn Sie versuchen, den Fall zu isolieren, in dem sich nur der Indikator geändert hat, müssen Sie den Vergleich so erweitern, dass er alle anderen Attribute enthält, die sich möglicherweise im Datensatz geändert haben. Wenn Ihr Tisch im Wesentlichen groß ist, können Sie Ressourcen durchkauen, wenn Sie den gesamten Tisch gegen den Tisch laufen lassen.

Da ich keine Beispieldaten zum Testen hatte, ist die von mir bereitgestellte SQL im Geiste dessen geschrieben, was Sie erreichen möchten. ColA und ColB repräsentieren Ihren Primärschlüssel oder was auch immer einen Datensatz in Ihrer Tabelle eindeutig identifiziert. Die Windowing-Funktionen werden verwendet, um eine Zeile nach vorne schauen, so dass Sie den aktuellen Datensatz der Wert für Indicator auf den nächsten Datensatz Wert von Indicator vergleichen kann:

SELECT ColA 
    , ColB 
    , Indicator 
    , StartDate 
    , EndDate 
    , MAX(Indicator) OVER (PARTITION BY ColA, ColB 
          ORDER BY StartDate 
          ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS NextIndicator 
    , MAX(StartDate) OVER (PARTITION BY ColA, ColB 
          ORDER BY StartDate 
          ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS NextStartDate 
    , MAX(EndDate) OVER (PARTITION BY ColA, ColB 
          ORDER BY StartDate 
          ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS NextEndDate 
    FROM MyTable 
QUALIFY NextIndicator <> Indicator; 
Verwandte Themen