トラックのポイント (x/y 座標) を含む MySQL テーブルがあります。各行には、特定の時点でのそのトラックの TrackID、タイムスタンプ、および X 位置と Y 位置が含まれます。
私が欲しいのは、特定の時間間隔 (tmin...tmax) 中にアクティブだったすべての TrackID のリストであり、その開始時間が interval の外にある場合でも、開始時間で並べ替えられます。
ちょっとしたイラストが役立つかもしれません:
例として、トラック 1 は t11 から t12 までアクティブです。これは、テーブルに ID=1 でタイムスタンプが t11 から t12 までの行が多数あることを意味します。
望ましい出力は次のようになります。
TrackID | StartTime
--------+-----------
7 | t71
1 | t11
2 | t21
6 | t61
私はこのようなことを試しました:
SELECT TrackID, MIN(Timestamp) AS StartTime FROM Tracks WHERE Timestamp BETWEEN tmin AND tmax GROUP BY TrackID ORDER BY StartTime;
ただし、上記の例では、トラック 1 と 7 の実際の開始時刻を取得できません。これは、タイムスタンプが tmin 未満のすべての行がまったく考慮されていないためです。
もちろん、最初のステップですべてのアクティブな TrackID を取得することもできます
SELECT TrackID FROM Tracks WHERE Timestamp BETWEEN tmin AND tmax GROUP BY TrackID;
次に、個別のクエリを使用して、これらすべてのトラックの開始時間を見つけ、アプリケーション コードで並べ替えます。
しかし、1 つの SQL クエリでこれを行う方法があると確信しています。私のテーブルには何百万もの行が含まれているため、ここでは効率が問題になります。