Einzelnen Beitrag anzeigen

Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#4

Re: Zeiträume verwalten

  Alt 2. Okt 2006, 09:57
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat