Ho una tabella MySQL contenente i punti (x/y) coordinate dei cingoli. Ogni riga contiene il TrackID, un Timestamp e le Posizioni X e Y per quella traccia in quel determinato momento.SQL: elenco di tutti gli ID che erano attivi durante un determinato intervallo di tempo, filtrate dal loro tempo di avvio
Quello che voglio è un elenco di tutti i TrackID che erano attivi durante un dato intervallo di tempo (tmin ... tmax), ordinati in base al loro orario di inizio, anche se l'ora di inizio è esterna all'intervallo.
Un po 'illustrazione potrebbe aiutare:
Per fare un esempio: Traccia 1 è attivo da t11 fino t12, il che significa che ho molti file nella mia tabella con ID = 1 e con il timestamp che vanno da da t11 a t12.
L'output desiderato sarebbe:
TrackID | StartTime
--------+-----------
7 | t71
1 | t11
2 | t21
6 | t61
Ho provato qualcosa di simile:
SELECT TrackID, MIN(Timestamp) AS StartTime FROM Tracks WHERE Timestamp BETWEEN tmin AND tmax GROUP BY TrackID ORDER BY StartTime;
Tuttavia, nell'esempio di cui sopra non ottengo i tempi reali di inizio per le tracce 1 e 7 , poiché tutte le righe con data e ora inferiori a tmin non vengono considerate affatto.
Naturalmente ho potuto in una prima fase solo ottenere tutte TrackIDs attivi con
SELECT TrackID FROM Tracks WHERE Timestamp BETWEEN tmin AND tmax GROUP BY TrackID;
e poi con query separate trovano gli orari di inizio di tutte queste tracce e poi ordinarli nel mio codice dell'applicazione.
ma sono sicuro che ci sia un modo per fare questo con una sola query SQL. La mia tabella contiene milioni di righe, quindi l'efficienza è un problema qui.
Anche l'orario di inizio è fuori e che dire di tempo finale ... Vuoi che lo stesso comportamento ? – DonCallisto
Non mi interessa il tempo di fine in questa applicazione. –
È possibile che l'ora di inizio e l'ora di fine siano entrambi fuori da tmin e tmax senza che vengano visualizzati timestamp tra tmin e tmax? Se è così, allora la tua seconda query avrà un falso negativo in quel caso. – mellamokb