Reputation:
I have 2 a table named "maintenances" and another "processes" and "cars". maintenances:
id car_id process_id date
1 1 1 4/26/2013
2 1 1 5/26/2013
3 1 2 5/26/2013
I want to select distinct values for car_id and process_id repeated based on max date. So I want:
id car_id process_id date
2 1 1 5/26/2013
3 1 1 5/26/2013
I have this:
SELECT m.*, u.username, c.milage, p.*, s.name
FROM maintenances as m
LEFT JOIN users AS u
ON u.id = m.user_id
LEFT JOIN cars AS c
ON c.id = m.car_id
LEFT JOIN processes as p
ON p.id = m.process_id
LEFT JOIN services as s
ON s.id = m.service_id
Group by m.car_id, m.process_id
But this gives me :
id car_id process_id date
1 1 1 4/26/2013
3 1 2 5/26/2013
I want:
id car_id process_id date
2 1 1 5/26/2013
3 1 2 5/26/2013
Upvotes: 1
Views: 341
Reputation: 24134
Try to join maintenances
with a subquery with MAX(date)
:
SELECT m.*, u.username, c.milage, p.*, s.name
FROM maintenances as m
JOIN
(SELECT car_id, process_id, MAX(date) as MAX_DATE
FROM maintenances
GROUP BY by car_id, process_id) as MAX_T ON m.car_id = MAX_T.car_id
AND m.process_id = MAX_T.process_id
AND m.date = MAX_T.MAX_DATE
LEFT JOIN users AS u ON u.id = m.user_id
LEFT JOIN cars AS c ON c.id = m.car_id
LEFT JOIN processes AS p ON p.id = m.process_id
LEFT JOIN services AS s ON s.id = m.service_id
Upvotes: 3