Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Gruppierung nach überlappenden Datumsintervallen

Begonnen von Diggi, Januar 02, 2015, 21:49:54

⏪ vorheriges - nächstes ⏩

Diggi

Ein Hallo an die Mathematiker unter euch!
Ich habe folgendes Problem, dessen systematische Bearbeitung ich genauer kennenlernen möchte:
Eine Abfrage soll auf mehreren miteinander verknüpften Tabellen basieren. Von diesen besitzen 5 je 2 Felder mit Datentyp long [von],[bis](Leerwert=aktuelles Datum) als Intervallgrenzen für die Gültigkeit der jeweiligen Datensätze.
Ich möchte eine Abfrage erstellen, die die Datensätze nach allen überlappenden Zeiträumen gruppiert und diese anzeigen.
Tabellen (beispielhaft):

A:
ANr
A.von
A.bis
...

B:
BNr
ANr
B.von
B.bis
...

C:
CNr
BNr
C.von
C.bis
...

D:
DNr
CNr
D.von
D.bis
...

E:
ENr
DNr
E.von
E.bis
...
und weitere verknüpfte Tabellen

Mein Ansatz war, die komplette Tabellenstruktur im FROM-Abschnitt abzubilden und als Abfragekriterien jeweils die untere und obere Grenze eines Gültigkeitsbereich zwischen alle anderen zu setzen. also:

WHERE (nz(A.von, 0) BETWEEN B.von AND B.bis) AND (nz(A.von, 0) BETWEEN C.von AND C.bis) AND ... BETWEEN E.von AND E.bis)
OR
(nz(A.bis, Date()) BETWEEN B.von AND B.Bis) AND ... BETWEEN E.von AND E.bis)

Bis hierhin funktioniert die Abfrage wohl. Um aber die zugehörigen Minima bzw. Maxima der 2x5 Intervallgrenzen in Abfragefeldern darstellen zu können, müsste ich wohl komplexe und korrekte UNION-Unterabfragen erstellen, die mit Kriterienparametern aus der übergeordneten Abfrage zu füllen wären (wenn das überhaupt funktioniert). Damit wäre ich aber überfordert.
Deshalb meine Frage nach Tipps zu einem möglichst ökonomischen Lösungsansatz.

ebs17

Zitatzu einem möglichst ökonomischen Lösungsansatz
Dieser beginnt schon einmal damit, dass man die gleichen Daten der verschiedenen Tabellen zu einer Tabelle zusammenführt. Nicht UNION-Abfrage, sondern richtige Tabelle. Dann ließen sich Indizes nutzen, was der Performance sehr zuträglich wäre.

Überlappende Zeiträume lassen sich ermitteln:
- Zeitraumbeginn liegt in einem anderen Zeitraum
- Zeitraumende liegt in einem anderen Zeitraum
- Zeitraum umschließt einen anderen Zeitraum

Den dritten Part hast Du in Deinem Ansatz noch nicht erfasst.

Den Teil Gruppierung und Intervallgrenzen habe ich nicht verstanden. Das würde wohl besser an konkreten Beispielen (Demo-DB) zu zeigen sein.
Mit freundlichem Glück Auf!

Eberhard