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