我有两张桌子:
表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记录)
提前致谢
答案 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)
最好的方法是在数据库的每个表中包含CreatedAt
和ModifiedAt
个字段。然后你只需添加ORDER BY CreatedAd LIMIT 1
。不确定你的Time
是不是我的意思。
你还拥有ID。现在,如果ID
是AutoIncremental
,那么工作应该很容易。使用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