user3660185
user3660185

Reputation:

select distinct where max date

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

Answers (1)

valex
valex

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

Related Questions