Wir hatten ein ähnliches Problem mit BIRT-Berichten, da wir an jenen Tagen berichten wollten, an denen keine Daten vorhanden waren. Da es für diese Daten keine Einträge gab, bestand die einfachste Lösung für uns darin, eine einfache Tabelle zu erstellen, in der alle Daten gespeichert wurden, und diese zum Abrufen von Bereichen oder zum Verknüpfen zu Nullwerten für dieses Datum zu verwenden.
Wir haben einen Job, der jeden Monat ausgeführt wird, um sicherzustellen, dass die Tabelle 5 Jahre in der Zukunft gefüllt ist. Die Tabelle wird folgendermaßen erstellt:
create table all_dates (
dt date primary key
);
Zweifellos gibt es magisch knifflige Möglichkeiten, dies mit verschiedenen DBMS zu tun, aber wir entscheiden uns immer für die einfachste Lösung. Die Speicheranforderungen für die Tabelle sind minimal und machen die Abfragen so viel einfacher und portabler. Diese Art von Lösung ist aus Sicht der Leistung fast immer besser, da keine zeilenweisen Berechnungen für die Daten erforderlich sind.
Die andere Option (und wir haben dies bereits verwendet) besteht darin, sicherzustellen, dass für jedes Datum ein Eintrag in der Tabelle vorhanden ist. Wir haben die Tabelle regelmäßig gekehrt und keine Einträge für Daten und / oder Zeiten hinzugefügt, die nicht vorhanden waren. Dies ist in Ihrem Fall möglicherweise keine Option, sondern hängt von den gespeicherten Daten ab.
Wenn Sie wirklich denken, dass es ein Ärger ist, das zu behaltenall_dates
Tabelle , ist eine gespeicherte Prozedur der richtige Weg, um einen Datensatz mit diesen Daten zurückzugeben. Dies ist mit ziemlicher Sicherheit langsamer, da Sie den Bereich bei jedem Aufruf berechnen müssen, anstatt nur vorberechnete Daten aus einer Tabelle abzurufen.
Um ehrlich zu sein, können Sie die Tabelle 1000 Jahre lang ohne ernsthafte Probleme bei der Datenspeicherung ausfüllen - 365.000 16-Byte-Daten (zum Beispiel) plus einen Index, der das Datum dupliziert, plus 20% Overhead für die Sicherheit, würde ich ungefähr schätzen ungefähr 14M [365.000 * 16 * 2 * 1,2 = 14.016.000 Bytes]), eine winzige Tabelle im Schema der Dinge.