У меня есть таблица MySQL, содержащая точки (координаты x/y) дорожек. Каждая строка содержит идентификатор дорожки, отметку времени и позиции X и Y для этой дорожки в данный момент времени.
Мне нужен список всех TrackID, которые были активны в течение заданного интервала времени (tmin...tmax), отсортированные по времени их начала, даже если это время начала находится за пределами интервала.
Небольшая иллюстрация может помочь:
В качестве примера: Дорожка 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;
, а затем с помощью отдельных запросов найти время начала всех этих треков, а затем отсортировать их в коде моего приложения.
Но я уверен, что есть способ сделать это с помощью одного SQL-запроса. Моя таблица содержит миллионы строк, поэтому эффективность здесь является проблемой.