SQL-Abfrage: Liste aller IDs, die während eines bestimmten Zeitintervalls aktiv waren, sortiert nach ihrer Startzeit

8

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.

    
Robert Hegner 01.06.2012, 13:44
quelle

4 Antworten

3

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.

  1. tend & gt; tmin UND
  2. tstart & lt; tmax

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%     
mellamokb 01.06.2012, 13:56
quelle
4

Sehen Sie sich Ihr Bild an - alle gewünschten Bereiche haben eine Endzeit von mehr als min und eine Startzeit von weniger als max .

    
Nikola Markovinović 01.06.2012 13:52
quelle
2

Wie wäre es mit:

%Vor%

Das ist besser, denke ich:

%Vor%

Ok, ich bin sicher, das ist es jetzt: p

%Vor%     
quelle
-1

Sie waren mit Ihrer zweiten Anfrage auf dem richtigen Weg, Sie müssen lediglich eine ORDER BY -Klausel hinzufügen.

%Vor%     
Sean 01.06.2012 13:51
quelle

Tags und Links