AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeiträume verwalten

Offene Frage von "smudo"
Ein Thema von smudo · begonnen am 2. Okt 2006 · letzter Beitrag vom 2. Okt 2006
Antwort Antwort
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#1

Zeiträume verwalten

  Alt 2. Okt 2006, 09:27
Hallo,

ich habe eine Menge von Zeiträumen (StartDatum - Enddatum)
Diese können sich beliebig überschneiden. Beispiel:
  • 1.3.06 - 4.5.06
  • 20.2.06 - 1.4.06
  • 25.3.06 - 31.12.06
Der maximale Zeitraum ist meißt ein Jahr, kann aber auch variieren, natürlich auch die Anzahl der Zeiträume.
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. Ich bin aber auch dankbar für jede andere Lösungsmöglichkeit.

Vielen Dank

René
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Zeiträume verwalten

  Alt 2. Okt 2006, 09:46
Ich würde es mit TDateTime machen.

Da kannst du jedes Dateum deiner Intervalle umrechnen lassen ein einen Double wert.

DAnn must du nur noch Zahlenwerte Vergleichen und das ist dann hoffentlich kein Problem mehr .
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Zeiträume verwalten

  Alt 2. Okt 2006, 09:54
Hallo René,

deine Fragestellung ist nicht klar genug.

Zitat:
Ich möchte nun wissen, wieviele Zeiträume maximal bzw. minimal bzw. zu einem bestimmten Zeitpunkt aktiv wahren
Maximal und Minimal spielen bei dieser Fragestellung keine Rolle. Allerdings hast du in deinen Beispielen auch "Max in 2006" aufgeführt, was definitiv keinen Zeitpunkt darstellt. Ansonsten ist ein Intervalltest in SQL recht einfach:

SELECT COUNT(*) FROM tabelle WHERE von <= :zeitpunkt and bis >= :zeitpunkt Grüße vom marabu
  Mit Zitat antworten Zitat
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
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Zeiträume verwalten

  Alt 2. Okt 2006, 11:04
Ich formuliere es mal etwas deutlicher:
  • Es geht hier um x Personen, die in einem bestimmten Zeitraum aktiv waren
  • ich möchte wissen, wieviel Personen maximal oder minimal aktiv waren.
  • der Zeitraum, in welchem des Maximum/Minimum auftrat ist auch interessant, aber sicherlich noch schwieriger zu ermitteln, da es u.U. in mehreren Zeiträumen die gleichen Max- oder Minwerte geben kann.

Der SP-Ansatz von Jürgen Thomas sieht sehr interessant aus, ich werde das mal nachbauen. Im Moment versuche ich's in ähnlicher Weise über eine Delphi-Routine ohne SQL.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Zeiträume verwalten

  Alt 2. Okt 2006, 11:11
Wie speicherst du die Werte, wie oben vorgeschlagen in einer Datenbank?
Markus Kinzler
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Zeiträume verwalten

  Alt 2. Okt 2006, 11:16
PersNr DatumVon DatumBis
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz