SQL Beispiele
Hier finden Sie einige SQL-Schnipsel aus meiner Programmiertätigkeit.
Join einer Tabelle mit sich selbst
Immer wieder kommt es vor, dass für eine Berechnung mehrere Zeilen einer Tabelle als eine betrachtet werden sollen. Hier übersieht man gerne das Offensichtliche: den JOIN einer Tabelle mit sich selbst.
Als Beispiel betrachten wir eine Tabelle, in der mitgeschrieben wird, zu welchen Zeiten der Schritt eines Bestellvorganges abgeschlossen ist:
CREATE TABLE `order_process` ( `order_id` tinyint(4) NOT NULL, `customer_action` tinyint(4) NOT NULL, `time` time NOT NULL, PRIMARY KEY (`order_id`,`customer_action`) );
Als Beispieldaten nehmen wir die zwei Bestellvorgänge mit der Bestellnummer 1 und 2. Die Kunden haben unterschiedlich lange für den Bestellvorgang gebraucht. Dies ist jedoch aus den Daten nicht sofort ersichtlich.
INSERT INTO order_process VALUES
(1,1,'11:06:33'),
(1,2,'11:09:43'),
(2,1,'22:02:11'),
(2,2,'22:04:54');
Jetzt stellt sich die Frage nach dem SQL-Statement, dass uns berechnet, wie lange der jeweilige Bestellvorgang gedauert hat. Hierzu kann der MySQL-Befehl TIMEDIFF eingesetzt werden, der jedoch nur auf einer Zeile arbeitet. Zeit für das JOIN:
SELECT e.order_id, e.customer_action, TIMEDIFF( e.time, s.time ) AS process_time FROM order_process AS s JOIN order_process AS e ON s.order_id = e.order_id AND s.customer_action = e.customer_action -1 +----------+-----------------+--------------+ | order_id | customer_action | process_time | +----------+-----------------+--------------+ | 1 | 2 | 00:03:10 | | 2 | 2 | 00:02:43 | +----------+-----------------+--------------+ 2 rows in set (0.00 sec)
Im Ergebnis sehen wir die Zeiten, die der Bestellvorgang jeweils gebraucht hat.
Micha, 17 Apr 2006

