如何在Mysql

时间:2015-05-08 07:17:29

标签: mysql join left-join

我有4个表,我使用LEFT JOIN合并表,所有工作正常。

这是我正在使用的查询

   SELECT cont_details.* FROM depot_tracking
   LEFT JOIN depot_details
   ON depot_tracking.depot_details_id = depot_details.depot_details_id
   LEFT JOIN cont_details 
   ON depot_tracking.cont_details_id = cont_details.cont_no
   WHERE depot_details.depot_city = "maa"
   AND depot_tracking.status = "0" AND depot_tracking.gate_out =""

现在我这样出来了!

--------------------------------------------
 cont_details_id  |    gate_in  | cont_no
--------------------------------------------
       1          | 05-05-2015  |  dd
       1          | 13-04-2015  |  cc
       2          | 23-03-2015  |  bb
       3          | 15-05-2015  |  aa
       1          | 21-02-2015  |  dd
       3          | 25-05-2015  |  cc
       2          | 30-03-2015  |  bb
       4          | 15-05-2015  |  aa

现在我想基于depot_tracking.gate_in列过滤重复的行。

在这个图像中有con_details_id(1)来两次现在我想要19-04-2015(最后日期)最大日期,休息必须过滤,同样对所有2,3,4,5等。 。,

问题是我无法将gate_in列更改为日期格式,因此我习惯将列更改为STRING TO DATE FORMATE使用以下查询

(str_to_date(d.gate_in,'%d-%m-%Y')) 

所以请有人帮我过滤重复的行(仅显示最大日期行)

现在期待输出

--------------------------------------------
 cont_details_id  |    gate_in  | cont_no
--------------------------------------------
       1          | 05-05-2015  |  dd
       3          | 25-05-2015  |  cc
       2          | 30-03-2015  |  bb
       4          | 15-05-2015  |  aa

1 个答案:

答案 0 :(得分:0)

只需订购您的表,然后按ID分组

SELECT
  *
FROM
  (
    SELECT
      *
    FROM
      table1
    ORDER BY
      cont_details_id ASC, gate_in DESC
  ) origin
GROUP BY
  origin.cont_details_id

立即将<{1}}替换为您的结果

SQL小提琴:http://sqlfiddle.com/#!9/b90d5/1/0