Zitat von
smudo:
Ich möchte nun wissen, wieviele Zeiträume maximal bzw. minimal bzw. zu einem bestimmten Zeitpunkt aktiv wahren
Hier also:
- Max für 2006: 3
- Min für 2006: 0
- am 1.3.06: 2
Wie kann man das am Besten lösen? Die Daten liegen in einer
DB vor, deshalb wäre
SQL das Beste.
Hallo René,
versuche es einmal in folgender Richtung:
SQL-Code:
/* geeignet für die letzte Abfrage */
SELECT COUNT(*) FROM Table
WHERE :Vergleichsdatum BETWEEN StartDatum AND EndDatum;
Für die anderen Abfragen nach Max/Min fällt mir zunächst nur der Umweg über StoredProcedures ein:
SQL-Code:
CREATE PROCEDURE Maximalwert ( VglVon DATE, VglBis DATE )
RETURNS ( Anzahl INTEGER ) AS
BEGIN
SELECT MAX(*) FROM Zwischenwerte( VglVon, VglBis );
SUSPEND;
END ^
/* unter Verwendung der folgenden StoredProcedure */
CREATE PROCEDURE Zwischenwerte( VglVon DATE, VglBis DATE )
RETURNS ( Anzahl INTEGER ) AS
DECLARE VARIABLE iAkt INTEGER;
DECLARE VARIABLE iBis INTEGER;
DECLARE VARIABLE Vergleichsdatum DATE;
BEGIN
iAkt = CAST(VglVon AS INTEGER);
iBis = CAST(VglBis AS INTEGER);
WHILE (iAkt <= iBis)
DO BEGIN
Vergleichsdatum = CAST(iAkt AS DATE);
SELECT COUNT(*) FROM Table
WHERE :Vergleichsdatum BETWEEN StartDatum AND EndDatum;
INTO :Anzahl;
SUSPEND;
iAkt = iAkt + 1;
END
END ^
Warnung: Ich habe das schnell hingeschrieben ohne exakte Kontrolle der Schreibweisen und Prüfung, ob dieser CAST wirklich so funktioniert; für andere
SQL-Dialekte muss es ggf. anders formuliert werden. Auch kann ich mir lebhaft vorstellen, dass es schnellere Wege gibt.
Aber vielleicht liefert Dir das erfolgreiche Anregungen. Gruß Jürgen