【问题标题】:select distinct where max date选择不同的最大日期
【发布时间】:2014-05-26 06:52:12
【问题描述】:

我有 2 个名为“维护”的表和另一个“进程”和“汽车”。 维护:

id   car_id   process_id   date
1     1        1           4/26/2013
2     1        1           5/26/2013
3     1        2           5/26/2013

我想为根据最大日期重复的 car_id 和 process_id 选择不同的值。所以我想要:

id   car_id   process_id   date
2    1          1          5/26/2013
3    1          1          5/26/2013

我有这个:

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

但这给了我:

id   car_id   process_id   date
 1    1          1          4/26/2013
 3    1          2          5/26/2013

我想要:

 id   car_id   process_id   date
  2    1          1          5/26/2013
  3    1          2          5/26/2013

【问题讨论】:

  • 从给定的数据中获取行3 1 1 5/26/2013的逻辑是什么
  • 你想要第二行的 process_id 2,不是吗?
  • max(date) with group by car_id,process_id 怎么样
  • @Raphaël Althaus 刚刚编辑了我的问题。我犯了一个小错误。请看一下
  • @Sadikhasan 将 max(date) 放在哪里?

标签: mysql sql


【解决方案1】:

尝试用MAX(date) 的子查询加入maintenances

  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

【讨论】:

    猜你喜欢
    • 2014-01-24
    • 2012-09-26
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 2022-01-19
    • 2011-09-30
    • 2012-12-24
    • 1970-01-01
    相关资源
    最近更新 更多