phpbar.de logo

Mailinglisten-Archive

Zeit einer Zeitspanne aus einem Zeitfundus ermitteln

Zeit einer Zeitspanne aus einem Zeitfundus ermitteln

ramm at net-and-works.de ramm at net-and-works.de
Die Jul 22 17:18:22 CEST 2003


Hi,

Voraussetzung: MySQL 3.24, möglichst ein Select-Befehl (keine temptabellen)

Problem: Ich will die Zeit einer Zeitspanne aus einem Zeitfundus ermitteln.

Ich habe dabei Zeiten in eine Tabelle(zeit) eingetragen. Diese Tablle
stellt den Zeitfundus dar. In einer anderen Tabelle(zeitspanne) befinden
sich die Zeitspannenwechsel (zeitspanne.start) mit den id's. Nnun möchte
ich die Zeiten ermitteln die innerhalb der Zeitspannen liegen. Diese dürfen
aber nur dem Zeitbereich aus Tabelle(zeit) entnommen werden. Die Startzeit
einer Zeitspanne soll gleichtzeitig das Ende der Vorherigen sein.

Sonderfall:
Liegt ein Zeitspannenwechsel(zeitspanne.start) auserhalb des Zeitfundus in
Tabelle "zeit", wird erst ab der Startzeit in "zeit" (zeit.start) die Zeit
gezählt.

Probiert viellecht mal mein Beispiel (s.u.) aus:

Ich habe es bisher nur geschaft, die Ausgabe so zu gestallten, dass ich die
alle Zeiten ab einem Zeitsapannenwechsel erhalte. leider sind die folgenden
Zeitenspannen hineinaddiert (siehe Ausgabe: ganz unten).

danke schon mal im Voraus,
Thorsten

SQL TEST:
-------------------------------------------------------
CREATE TABLE zeit(
   start DATETIME NOT NULL,
   ende DATETIME NOT NULL);

CREATE TABLE zeitspanne(
   id int NOT NULL,
   start DATETIME NOT NULL);

INSERT INTO zeit VALUES
        ('2003-07-19 08:00','2003-07-19 10:00')
       ,('2003-07-20 08:00','2003-07-20 16:00')
       ,('2003-07-21 07:00','2003-07-21 10:00')
       ,('2003-07-21 08:00','2003-07-21 09:00');

INSERT INTO zeitspanne VALUES
        (1,'2003-07-19 00:00')
       ,(2,'2003-07-20 12:00')
       ,(3,'2003-07-22 00:00')

SELECT
      zeitspanne.*,
      SUM(if(zeitspanne.start BETWEEN zeit.start AND zeit.ende,
          zeit.ende - zeitspanne.start,
          zeit.ende - zeit.start )
          ) as summe
FROM
    zeitspanne
    LEFT OUTER JOIN zeit
         ON (zeitspanne.start <= zeit.ende)
GROUP BY
      zeitspanne.id
ORDER BY
      zeitspanne.start  ;

-----------------------------------------------------
Ausgabe bei mir:

+----+---------------------+--------+
| id | start               | summe  |
+----+---------------------+--------+
|  1 | 2003-07-19 00:00:00 | 140000 |
|  2 | 2003-07-20 12:00:00 |  80000 |
|  3 | 2003-07-22 00:00:00 |      0 |
+----+---------------------+--------+

Dann ergibt:
     140000 - 80000 = 60000 die Zeitspanne für '1'
     80000 - 0 = 80000 die Zeitspanne für '2'
     0 = 0 die Zeitspanne für '3'


-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive