Hallo,
ich hab hier bisher schon als Gast einiges verfolgt, habe jetzt aber selber mal eine Frage.
Und zwar habe ich die zwei folgenden Tabellen CAN und GPS, welche über eine Tabelle log mittels der logid eine Beziehung eingehen. CAN <--> LOG <--> GPS
CAN:
GPS:
Wie zusehen ist hat jeder GPS- und jeder CAN-Eintrag einen eigenen Zeitstempel.
In einer Abfrage möchte ich nun folgendes Ergebnis bekommen:
Das heißt alle CAN-Daten sollen dem nächsten GPS-Signal welches zugeordnet werden.
Momentan arbeite ich an dem folgendem Query das zu erreichen.
Dieser ist allerdings unglaublich langsam, was vermutlich an der Datenmenge der CAN-Daten liegt (~40000), daher hab ich den Query erstmal auf 1000 Elemente beschränkt, was jedoch auch schon ~15s Rechenzeit beansprucht.
Das nächste Problem an diesem Query ist allerdings, das scheinbar nicht alle Daten berücksichtigt werden, weshalb ich aus dem Join ein FULL OUTER JOIN machen wollte. Dies bricht allerdings immer mit dem folgenden Fehler ab:
Wäre über jede Hilfe dankbar!
ich hab hier bisher schon als Gast einiges verfolgt, habe jetzt aber selber mal eine Frage.
Und zwar habe ich die zwei folgenden Tabellen CAN und GPS, welche über eine Tabelle log mittels der logid eine Beziehung eingehen. CAN <--> LOG <--> GPS
CAN:
Code:
id canid logid data timestamp
1 0x90FE6FFE 1 000000C533BB87FF 600
2 0x8CF004FE 1 007D7D9C6300F07D 610
3 0x90FE6FFE 1 000000C5E6C683FF 1640
4 0x8CF004FE 1 007D7DF03A00F07D 1500
5 0x90FE6FFE 1 000000C59AD283FF 1600
Code:
id lat lng logid timestamp
1 52.220961 9.416273 1 550
2 52.220960 9.416273 1 1550
3 52.220960 9.416273 1 2551
4 52.220960 9.416273 1 3546
5 52.220959 9.416274 1 4548
In einer Abfrage möchte ich nun folgendes Ergebnis bekommen:
Code:
can_ID lat lng gps.timestamp diff_to_gps_TS gps_ID
NULL +52.220961 +9.416273 550 NULL 1
1 NULL NULL NULL 50 NULL
2 NULL NULL NULL 60 NULL
NULL +52.220960 +9.416273 1550 NULL 2
3 NULL NULL NULL 90 NULL
4 NULL NULL NULL 50 NULL
Momentan arbeite ich an dem folgendem Query das zu erreichen.
Code:
SELECT c.id can_ID, g.lat, g.lng , g.timestamp gps_timestamp
FROM can c
JOIN gps g ON c.logid = g.logid
WHERE g.timeStamp = (SELECT gg.timestamp
FROM gps gg
ORDER BY abs(gg.timeStamp - c.timeStamp)
LIMIT 1
)
ORDER BY c.id LIMIT 1000
Das nächste Problem an diesem Query ist allerdings, das scheinbar nicht alle Daten berücksichtigt werden, weshalb ich aus dem Join ein FULL OUTER JOIN machen wollte. Dies bricht allerdings immer mit dem folgenden Fehler ab:
#1064 - Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei 'FULL OUTER JOIN gps g ON c.logid = g.logid
WHERE g.timeStamp = (SELECT gg.times' in Zeile 3
Wäre über jede Hilfe dankbar!