CiAgICA8IS0tIExpbmtlZEluIC0tPgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgIF9saW5rZWRpbl9wYXJ0bmVyX2lkID0gIjEyMzUwNzMiOwogICAgICAgIHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyA9IHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyB8fCBbXTsKICAgICAgICB3aW5kb3cuX2xpbmtlZGluX2RhdGFfcGFydG5lcl9pZHMucHVzaChfbGlua2VkaW5fcGFydG5lcl9pZCk7CiAgICA8L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgKGZ1bmN0aW9uKCl7dmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF07CiAgICAgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgICAgIGIudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiO2IuYXN5bmMgPSB0cnVlOwogICAgICAgICAgICBiLnNyYyA9ICJodHRwczovL3NuYXAubGljZG4uY29tL2xpLmxtcy1hbmFseXRpY3MvaW5zaWdodC5taW4uanMiOwogICAgICAgICAgICBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsIHMpO30pKCk7CiAgICA8L3NjcmlwdD4KICAgIDxub3NjcmlwdD4KICAgICAgICA8aW1nIGhlaWdodD0iMSIgd2lkdGg9IjEiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBhbHQ9IiIgc3JjPSJodHRwczovL3B4LmFkcy5saW5rZWRpbi5jb20vY29sbGVjdC8/cGlkPTEyMzUwNzMmZm10PWdpZiIgLz4KICAgIDwvbm9zY3JpcHQ+CiAgICA8IS0tIEVuZCBMaW5rZWRJbiAtLT4KICAgIA==
Generic filters
Exact matches only
Search in title
Search in excerpt
Search in content

Vorgänger und Nachfolger

Schwer zu verarbeitende Quelldaten in ungünstigen Formaten wurden bereits mehrfach in diesem Blogbeitrag diskutiert. Bei der Konvertierung von Excel-Kreuztabellen hilft ein kluges Tool, bei der Nutzung des PIVOT- und UNPIVOT-Operators reicht ein Befehl. Hier soll nun ein SQL-Statement präsentiert werden, welches bei der Suche von zeitlichen Vorgänger- und Nachfolgerdatensätzen wertvolle Dienste leistet.


Ein erstes Beispiel für den Einsatz des SQL-Statements sind “Gültig-Ab”-Tabellen. Häufig trifft man diese Form bei Kurstabellen an. Die Kurse des US-Dollars und des Schweizer Frankens zum Euro könnten so abgebildet sein:

Eine deutliche Vereinfachung bei der Weiterverwendung dieser Daten wird erreicht, wenn die Tabelle von einer “Gültig-Ab”-Tabelle in eine “Von-Bis”-Tabelle umgewandelt wird. Dafür ist es notwendig, dass man zu jedem Datensatz den zeitlich nachfolgenden Datensatz ermittelt.

Die Abfrage liefert folgendes Ergebnis:

Hinweis: Da zum letzten “Gültig ab” Datum kein Nachfolger gefunden wird, erscheint in der Spalte “BIS_DATUM” der Wert NULL. Durch den Isnull-Befehl sollte hier ein zukünftiges Datum gesetzt wer-den, damit bei einem SQL-Join die Zeile berücksichtigt wird.

Sehr hilfreich ist dieses Statement auch, wenn in einer Datenquelle nur kumulierte Werte oder Bestandswerte geliefert werden (vgl. den Beitrag Bestandswerte). Die kumulierten Werte sollen in einzelne Monatswerte umgerechnet werden.
Als Beispiel dienen hier folgende Kontodaten :

Kennt man den Vorgängerdatensatz der Konto/Kostenartkombination, lässt sich sehr einfach aus dem kumulierten Wert eine Monatsveränderung berechnen:

Das gewünschte Ergebnis ist hier in der letzten Spalte sichtbar:

Zuletzt noch ein Beispiel aus der Webloganalyse, wo Vorgänger- und Nachfolgedatensätze beachtet werden müssen. Eine Log-Datei eines Internetauftrittes liefert folgende Daten (vereinfachte Darstellung):

Man erkennt: Um 14.48 Uhr kommt ein Benutzer auf die Blogseite, nach 20 Sekunden wechselt er auf einen Blogbeitrag, danach springt er weiter in die Beiträge aus Dezember 2009. Um 14.48 Uhr und 50 Sekunden kommt ein weiterer Benutzer….
Aus dem Weblog kann man mit Hilfe des Vorgänger-Nachfolger-SQL ermitteln, wie lange jemand eine Seite angeschaut hat sowie mit welcher Seite eine Sitzung begonnen und beendet wurde.

Das Ergebnis der Abfrage stellt tabellarisch sehr gut strukturiert die Webaktivität dar.