Nehmen wir an, wir haben eine Tabelle mit Daten, die regelmäßig per GPS-Tracker gesendet werden.Kontinuierliche Fahrten basierend auf diskreten GPS-Nachrichten
CREATE TABLE unit_messages
(datetime timestamp, speed numeric, trip_distance numeric);
Es enthält Zeitstempel, wenn die Nachricht gesendet wird, Geschwindigkeit usw. und trip_distance wachsen, wenn Auto fährt und auf 0 zurückgesetzt, wenn er gestoppt wurde.
('2017-10-26T13:41:41', 0.0, 0.0),
('2017-10-26T13:41:57', 23.0, 0.1),
('2017-10-26T13:42:01', 11.0, 0.1),
('2017-10-26T13:42:18', 20.0, 0.2),
('2017-10-26T13:42:33', 56.0, 0.4),
('2017-10-26T13:42:41', 58.0, 0.5),
('2017-10-26T13:43:13', 0.0, 0.6),
...
('2017-10-26T14:03:38', 12.0, 13.5),
('2017-10-26T15:21:52', 0.0, 0.0)
Ziel ist es, SQL-Abfrage Herstellung eines TRIP Whit solche Signatur zu erstellen:
from_date, to_date, trip_distance
wo from_date Date wenn trip_distance = 0
(2017-10-26T13: 41: 41 in der ersten Zeile)
und to_date ist datetime der letzten Zeile vor trip_distance wurde 0
(wie in Zeile ('2017-10-26T14: 03: 38', 12.0, 13.5) vor dem letzten)
Die einzige Lösung, die ich habe, ist sequenziell über das Ergebnis von SELECT in einer Schleife zu durchlaufen. Hat jemand eine Idee, wie man das mit SQL macht?
Erstellen Sie einfach Gruppen basierend auf dem Abstand 0.0. https://stackoverflow.com/questions/tagged/gaps-and-islands –