Umsetzung mit SQL möglich?
Hallo zusammen,
gestern rief mich ein Freund an und fragte mich, ob man folgendes rein mit SQL umsetzen könnte:
Struktur der Tabelle:
id (int), fahrzeugid (int), Name(varchar), start(datetime), ende(datetime)
Abgespeichert werden die Einsätze von Fahrzeugen einer Firma. Die Fragestellung ist nun, wann und welche Fahrzeuge gleichzeitig im Einsatz waren.
Mir ist keine Möglichkeit rein über SQL eingefallen, habt ihr eine Idee?
Meine Auswertungsidee findet in der benutzen Programmiersprache statt: Schleifen und Vergleiche.
Danke für eure Antworten,
Gruß Stinger
gestern rief mich ein Freund an und fragte mich, ob man folgendes rein mit SQL umsetzen könnte:
Struktur der Tabelle:
id (int), fahrzeugid (int), Name(varchar), start(datetime), ende(datetime)
Abgespeichert werden die Einsätze von Fahrzeugen einer Firma. Die Fragestellung ist nun, wann und welche Fahrzeuge gleichzeitig im Einsatz waren.
Mir ist keine Möglichkeit rein über SQL eingefallen, habt ihr eine Idee?
Meine Auswertungsidee findet in der benutzen Programmiersprache statt: Schleifen und Vergleiche.
Danke für eure Antworten,
Gruß Stinger
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 133039
Url: https://administrator.de/contentid/133039
Ausgedruckt am: 25.11.2024 um 10:11 Uhr
3 Kommentare
Neuester Kommentar
Das ist in der Tat mal eine Interessante Frage.
Das hat bei mir funktioniert:
Mit einer Einschränkung: So findet es nur Fahrzeuge, die nach dem in der aktuellen Abfrage gestartet sind - aber das sollte ja leicht zu korrigieren sein
Grüße
Max
Das hat bei mir funktioniert:
SELECT a.*,
(SELECT GROUP_CONCAT(b.id) FROM tbl1 AS b WHERE b.start >= a.start AND b.start <= a.end AND b.id != a.id ) AS same_id
FROM tbl1 AS a
Grüße
Max
Hallo,
für reines ANSI-SQL fällt mir da nichts ein. Aber die meisten DBMS können ja mehr. In MS SQL könnte man z.B. eine Stored Procedure erstellen, die mit einem Cursor alle Datensätze nacheinander durchgeht (die von dir erwähnte Schleife) und alle anderen auf Überlappung vergleicht.
Gruß
Filipp
PS: Fällt mir gerade doch noch was ein: Ein interessanter Ansatz rein in SQL könnte über Joins gehen. Du kannst die Tabelle mit sich selbst Joinen, und als Join-Kriterium eine Überlappung der Zeit angeben.
für reines ANSI-SQL fällt mir da nichts ein. Aber die meisten DBMS können ja mehr. In MS SQL könnte man z.B. eine Stored Procedure erstellen, die mit einem Cursor alle Datensätze nacheinander durchgeht (die von dir erwähnte Schleife) und alle anderen auf Überlappung vergleicht.
Gruß
Filipp
PS: Fällt mir gerade doch noch was ein: Ein interessanter Ansatz rein in SQL könnte über Joins gehen. Du kannst die Tabelle mit sich selbst Joinen, und als Join-Kriterium eine Überlappung der Zeit angeben.
Hallo,
hört sich nach "Kreuztabelle" an. Wie filippg schrieb, dürfte das mit einer Prozedur am besten zu lösen sein. Da Du nicht schreibst für welches DBMS, hier mal ein Beispiel für den MS SQL Server.
Grüße p
hört sich nach "Kreuztabelle" an. Wie filippg schrieb, dürfte das mit einer Prozedur am besten zu lösen sein. Da Du nicht schreibst für welches DBMS, hier mal ein Beispiel für den MS SQL Server.
Grüße p