Wenn man mit SQL arbeitet, dann gehört die Behandlung von Datumsintervallen zu den Themen mit eher beschränktem Unterhaltungswert. Insofern ist es sehr nützlich, dass Stew Ashton eine Artikelserie veröffentlicht hat, in der er diverse Spezialfälle genauer beleuchtet, mit denen man in diesem Kontext konfrontiert werden kann:
- Joining Temporal Tables 1: virtual date ranges: behandelt den einfachsten Fall: lückenlose und überschneidungsfreie Intervalle, die nur über ein FROM_DATE definiert sind, während das TO_DATE ermittelt wird (hier spricht der Herr Ashton von "virtual date ranges"). Die einfachste Vorgehensweise zur Zusammenfassung der FROM_DATEs ist die Verwendung von UNION ALL - und die TO_DATEs kann man sich dazu über Analytics (last_value) ergänzen. Alternativ könnte man auch MATCH_RECOGNIZE einsetzen.
- Joining Temporal Tables 2: handling nulls: zeigt, wie sich das Vorgehen verändern muss, wenn NULL-Werte ins Spiel kommen. Für die MATCH_RECOGNIZE-Lösung ist das ein vorgesehener Fall, aber bei der Verwendung von Analytics muss man unter diesen Umständen eine klarere Fallunterscheidung einführen.
- Joining Temporal Tables 3: Gaps: führt Lücken in den Intervallen ein. Erneut ist das mit MATCH_RECOGNIZE offenbar einfacher zu fassen als mit den Analytics.
- Joining Temporal Tables 4: ranges: betrachtet das Vorgehen im Fall der Existenz "echter" Ranges gegenüber den "virtual date ranges" der vorangehenden Artikel. Auch in diesem Fall spare ich mir die Details der Lösung.
Meine zentrale Beobachtung an dieser Stelle ist, dass MATCH_RECOGNIZE in solchen Fällen offenbar eine echte Alternative ist, der ich gelegentlich mehr Aufmerksamkeit widmen sollte.
Keine Kommentare:
Kommentar veröffentlichen