我有一个包含轨道点(x/y 坐标)的 MySQL 表。每行包含 TrackID、时间戳以及该轨道在给定时间点的 X 和 Y 位置。
我想要的是在给定时间间隔 (tmin...tmax) 内处于活动状态的所有 TrackID 的列表,按其开始时间排序,即使开始时间超出间隔.
一个小例子可能会有所帮助:
举个例子:轨道 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 查询来完成此操作。我的表包含数百万行,因此效率是一个问题。
看看你的图片 - 所有你想要的范围的结束时间都大于min
并且开始时间小于max
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)