Hallo,
in einer Tabelle sind verschiedene Datumsangaben enthalten. z.B.
CREATE TABLE TMP_Datum (
ID int NOT NULL AUTO_INCREMENT,
ID_NBKst int DEFAULT NULL,
DatumStart date DEFAULT NULL,
DatumEnd date DEFAULT NULL,
PRIMARY KEY (ID)
)
Folgende Beispieldaten sind vorhanden:
INSERT INTO TMP_Datum(ID, ID_NBKst, DatumStart, DatumEnd) VALUES
(1, 1, '2019-09-01', '2019-10-31'),
(2, 1, '2019-06-01', '2019-06-30');
Wie man sehe kann, sind zwischen den einzelnen Datums-Bereichen Lücken (z.B. vom 2019-07-01 - 2019-08-31)
Wenn als zu testender Bereich der 2019-01-01 bis 2019-12-31 angegeben wird, soll herauskommen:
ID, ID_NbKst, DatumStart, DatumEnd
------------------------------------------------
0, 1, '2019-01-01', '2019-05-31'
2, 1, '2019-06-01', '2019-06-30'
0, 1, '2019-07-01', '2019-08-31'
1, 1, '2019-09-01', '2019-10-31'
0,1,'2019-11-01', '2019-12-31'
Diese Tabelle wird benötigt, um weitergehende Abfragen und Berechnungen ausführen zu können.
Mir fällt nur folgende Lösung ein:
1. Neue Tabelle erstellen z.B. Tab_BerechnetDatum
2. Insert- Update-Trigger auf die Tabelle TMP_Datum erstellen mit der Funktion mit Insert bei jedem Anlegen bzw. Aktualisieren von Einträgen (in der Tabelle TMP_Datum) die komplette Tabelle Tab_BerechnetDatum neu zu füllen
Das Füllen der neuen Tabelle könnte mit Hilfe einer For-Next-Schleife o.ä. erfolgen.
Gibt es noch einen anderen Lösungsansatz ohne Einsatz einer zusätzlichen Tabelle? Das Füllen der Tabelle Tab_BerechnetDatum ist je nach Umfang der vorhandenen Einträge entsprechend aufwendig.
Da MySql keine Tabelle als Rückgabewert von einer Funktion akzeptiert kann auch keine solche in einer Funktion generiert und als Return zurückgegeben werden.
in einer Tabelle sind verschiedene Datumsangaben enthalten. z.B.
CREATE TABLE TMP_Datum (
ID int NOT NULL AUTO_INCREMENT,
ID_NBKst int DEFAULT NULL,
DatumStart date DEFAULT NULL,
DatumEnd date DEFAULT NULL,
PRIMARY KEY (ID)
)
Folgende Beispieldaten sind vorhanden:
INSERT INTO TMP_Datum(ID, ID_NBKst, DatumStart, DatumEnd) VALUES
(1, 1, '2019-09-01', '2019-10-31'),
(2, 1, '2019-06-01', '2019-06-30');
Wie man sehe kann, sind zwischen den einzelnen Datums-Bereichen Lücken (z.B. vom 2019-07-01 - 2019-08-31)
Wenn als zu testender Bereich der 2019-01-01 bis 2019-12-31 angegeben wird, soll herauskommen:
ID, ID_NbKst, DatumStart, DatumEnd
------------------------------------------------
0, 1, '2019-01-01', '2019-05-31'
2, 1, '2019-06-01', '2019-06-30'
0, 1, '2019-07-01', '2019-08-31'
1, 1, '2019-09-01', '2019-10-31'
0,1,'2019-11-01', '2019-12-31'
Diese Tabelle wird benötigt, um weitergehende Abfragen und Berechnungen ausführen zu können.
Mir fällt nur folgende Lösung ein:
1. Neue Tabelle erstellen z.B. Tab_BerechnetDatum
2. Insert- Update-Trigger auf die Tabelle TMP_Datum erstellen mit der Funktion mit Insert bei jedem Anlegen bzw. Aktualisieren von Einträgen (in der Tabelle TMP_Datum) die komplette Tabelle Tab_BerechnetDatum neu zu füllen
Das Füllen der neuen Tabelle könnte mit Hilfe einer For-Next-Schleife o.ä. erfolgen.
Gibt es noch einen anderen Lösungsansatz ohne Einsatz einer zusätzlichen Tabelle? Das Füllen der Tabelle Tab_BerechnetDatum ist je nach Umfang der vorhandenen Einträge entsprechend aufwendig.
Da MySql keine Tabelle als Rückgabewert von einer Funktion akzeptiert kann auch keine solche in einer Funktion generiert und als Return zurückgegeben werden.