我有一个
MySQL表,包含轨道的点(x / y坐标).每行包含TrackID,时间戳以及该给定时间点该轨道的X和Y位置.
我想要的是在给定时间间隔(tmin … tmax)期间活动的所有TrackID的列表,按其开始时间排序,即使该开始时间在该间隔之外.
一个小插图可能有所帮助:
例如:Track 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查询来完成此操作.我的表包含数百万行,因此效率是一个问题.