Beste allen,

Omdat php en mysql een beetje een hobby is ben ik dus niet een expert.
Misschien dat ik daarom niet de oplossing vind voor dit probleem:

SELECT *
FROM tr_objecten
INNER JOIN data_tracking1
ON tr_objecten.imei = data_tracking1.IMEI WHERE DATE_TIME_STAMP + INTERVAL 10 MINUTE > NOW() ORDER BY data_tracking1.id DESC";

De opzet is als volgt:
In de database tr_objecten staan de unieke objecten met hun imei nummer.
Elk object stuur in elk geval elke 10 minuten een signaal met daarin zijn imei nummer welke in de database data_tracking1 wordt opgeslagen. Daaruit wil ik hebben: Van alle objecten welke zowel in tr_objecten als in data_tracking1 voorkomen de meest actuele.

De bovenstaande code werkt op zich wel maar krijg ik van elk object de laatste meldingen van de laatste 10 minuten. Dat lijkt goed maar de objecten sturen ook signalen tussen door bijvoorbeeld als ze verplaatsen. Maar ik wil enkel het meest actuele records per imei nummer...
LIMIT 1 werkt dus niet want dan krijg het van alle objecten gezamenlijk de laatste (is dus maar 1 terwijl er meerdere objecten zijn...)
Als er 20 objecten zijn wil ik dus ook 20 resultaten...
Je gebruikt de group by verkeerd, de combinatie SELECT * en group_by kan niet.
De eerste stap is bepalen wat het laatst ingevoerde record in datatracking voor een imeinummer is:

SELECT
	IMEI,
	MAX(id)
FROM
	datatracking1
WHERE DATE_TIME_STAMP > NOW() - INTERVAL 1 DAY
GROUP BY IMEI

Let op het verschil in de where!

Dit zet je dan in een subquery en dan ga je de anderen gegevens erbij halen:

SELECT
	o.IMEI,
	o.naam,
	t.DATE_TIME_STAMP
FROM
	(
	SELECT
		IMEI,
		MAX(ID)max_id
	FROM
		data_tracking1
	WHERE DATE_TIME_STAMP > NOW() - INTERVAL 1 DAY
	GROUP BY IMEI
	) s
JOIN
	tr_objecten o ON s.IMEI = o.imei
JOIN
	data_tracking1 t ON s.max_id = t.ID

Reageren