我有一個包含軌道點(x/y座標)的MySQL表。每行包含TrackID,時間戳,以及該給定時間點的該軌道的X和Y位置。SQL查詢:在給定時間間隔內活動的所有ID的列表(按其開始時間排序)
我想要的是在給定的時間間隔(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的行根本不被考慮。
當然,我可以在第一步中只得到所有活動TrackIDs與
SELECT TrackID FROM Tracks WHERE Timestamp BETWEEN tmin AND tmax GROUP BY TrackID;
,然後用單獨的查詢找到所有這些曲目的開始時間,然後在我的應用程序代碼進行排序。
但我相信有一種方法可以用一個SQL查詢來做到這一點。我的表格包含數百萬行,因此效率是一個問題。
甚至開始時間之外,怎麼樣完成時間......你想相同的行爲? – DonCallisto
我不在乎這個應用程序的結束時間。 –
開始時間和結束時間是否可能在tmin和tmax之外,tmin和tmax之間沒有時間戳?如果是這樣,那麼你的第二個查詢將在這種情況下有一個錯誤的否定。 – mellamokb