MYSQL:仅选择最新记录(在左连接表中)

时间:2015-01-16 08:59:28

标签: php mysql

我有两张桌子:

  

表1:

ID | Mobile Number | Name | Ordered Product| Order Date

表2:

ID(foreign_key can be inserted multipletimes in this table) |Contacted_for | Time(timestamp)

我需要一个查询来显示Table1中的所有数据,如果表2中有ID,我需要显示该ID的最后一个插入记录(带时间)

我的查询是

select a.* , b.* FROM table1 a LEFT JOIN table2 b ON a.ID=b.ID GROUP BY a.ID ORDER BY b.Time DESC

在我的查询中,当我删除Group by a.ID时,它可以工作但显示所有结果。但我想只显示table2的最终记录(没有重复的ID记录)

提前致谢

4 个答案:

答案 0 :(得分:7)

你需要一些子查询:

SELECT
    a.*, b.*
FROM
    table1 a
LEFT JOIN
    (SELECT c.id, d.contacted_for, c.time
     FROM
         (SELECT
            id,
            MAX(time) time
         FROM
             table2
         GROUP BY id
         ) c
     JOIN
         table2 d
         ON c.id = d.id AND d.time = c.time
     ) b
     ON a.id = b.id

答案 1 :(得分:0)

您也可以尝试这种方式。

Select * from table1 a left join
(Select * from table2 where id in (select max(id) from table2 group by id) ) b on a.id=b.id

答案 2 :(得分:-1)

最好的方法是在数据库的每个表中包含CreatedAtModifiedAt个字段。然后你只需添加ORDER BY CreatedAd LIMIT 1。不确定你的Time是不是我的意思。

你还拥有ID。现在,如果IDAutoIncremental,那么工作应该很容易。使用ORDER BY id DESC LIMIT 1

答案 3 :(得分:-1)

试试这个...我希望它可能有效

select a.* , b1.* 
FROM table1 a 
LEFT JOIN table2 b1
ON ( a.ID=b1.ID)  
LEFT JOIN table2 b2
ON ( a.ID=b1.ID)  AND 
(b1.Time < b2.Time OR b1.Time = b2.Time AND b1.ID < b2.ID)
WHERE b2.ID IS NULL
GROUP BY a.ID ORDER BY b1.Time DESC