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;
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
Ich bekomme nicht, was Sie wollen, können Sie einige Beispielzeilen und erwartetes Ergebnis hinzufügen? – dnoeth