Ich habe eine MySQL-Tabelle, die die Punkte (x / y-Koordinaten) von Spuren enthält. Jede Zeile enthält die TrackID, einen Zeitstempel und die X- und Y-Positionen für diese Spur zu diesem Zeitpunkt.
Was ich will, ist eine Liste aller TrackIDs, die während eines bestimmten Zeitintervalls (tmin ... tmax) aktiv waren, sortiert nach ihrer Startzeit, , auch wenn diese Startzeit außerhalb des Intervalls .
Eine kleine Illustration könnte helfen:
Als Beispiel: Track 1 ist aktiv von t11 bis t12, was bedeutet, dass ich viele Zeilen in meiner Tabelle mit ID = 1 und mit Zeitstempeln von t11 bis t12 habe.
Die gewünschte Ausgabe wäre:
%Vor%Ich habe so etwas versucht:
%Vor%Im obigen Beispiel bekomme ich jedoch nicht die tatsächlichen Startzeiten für die Spuren 1 und 7, da alle Zeilen mit Zeitstempeln kleiner als tmin überhaupt nicht berücksichtigt werden.
Natürlich könnte ich in einem ersten Schritt alle aktiven TrackIDs mit
bekommen %Vor%und dann mit separaten Abfragen die Startzeiten aller dieser Spuren finden und sie dann in meinem Anwendungscode sortieren.
Aber ich bin sicher, dass es eine Möglichkeit gibt, dies mit einer SQL-Abfrage zu tun. Meine Tabelle enthält Millionen von Zeilen, daher ist Effizienz ein Problem.
Eine Möglichkeit, darüber nachzudenken, besteht darin, die Logik zu konstruieren, um Ihre vier Spezialfälle in Ihrem Diagramm zu behandeln. Diese beiden Regeln sollten ausreichen.
Wenn eine dieser beiden Bedingungen zutrifft, sollte die Spur enthalten sein. Sie benötigen eine Liste von Spuren wie in Ihrer zweiten Abfrage mit ihren Min- und Max-Werten und führen dann die Vergleiche durch:
%Vor% Sehen Sie sich Ihr Bild an - alle gewünschten Bereiche haben eine Endzeit von mehr als min
und eine Startzeit von weniger als max
.
Wie wäre es mit:
%Vor%Das ist besser, denke ich:
%Vor%Ok, ich bin sicher, das ist es jetzt: p
%Vor%