Mailinglisten-Archive |
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