0

我有两个 MySQL 表。表格1:

id name otherid

表2:

id otherid time

在每个表中,“id”是每一行的唯一标识符(也是主键),“otherids”对应于表之间。table2 中可能有多个(或 0)行的 otherid 对应于 table1 中的 otherid。桌子

例如,表 1:

id name otherid
1  bob  24
2  joe  326

表 2:

id otherid time
4  326     2014-03-12 023:38:59
5  24      2013-02-11 22:05:21
6  24      2013-02-10 13:27:58

我希望获取 table1 中的每一行,按照 table2 中的行的最近时间排序,根据 otherid。在我的示例中,这是我要寻找的结果:

id name time
2  joe  2014-03-12 023:38:59
1  bob  2013-02-11 22:05:21

这是因为 Joe 拥有来自 table2 的最新时间。

4

6 回答 6

2

见下面的例子:

SELECT table1.*, max(table2.time) 
FROM table1 
INNER JOIN table2 ON table1.otherid = table2.otherid
GROUP BY table2.otherid
ORDER BY table2.id

参见SqlFiddle 演示

于 2013-02-12T04:25:30.060 回答
1

尝试

SELECT MIN(a.id) AS `id`, MIN(a.name) AS `name`, MAX(b.time) AS `time`
FROM table1 a INNER JOIN
     table2 b ON a.otherid = b.otherid
GROUP BY a.otherid
ORDER BY b.time DESC

工作的 sqlfiddle

于 2013-02-12T04:34:05.583 回答
0

您可以使用MAX功能获取最近的时间。

前任。MAX(time)

于 2013-02-12T04:25:25.390 回答
0
SELECT
    Table1.id, name, MAX(time)
FROM
    Table1
    JOIN Table2 USING (otherid)
GROUP BY
    otherid
ORDER BY
    time DESC
于 2013-02-12T04:25:50.130 回答
0
SELECT DISTINCT(table1.id),table1.name,table2.time FROM table1 
LEFT JOIN table2 ON table1.otherid=table2.otherid
ORDER BY table2.time DESC;
于 2013-02-12T04:32:56.740 回答
0

您可以使用连接和子查询尝试此操作:

select id, name
from tb1 a
left join
(select otherid, max(dt) mdt
from tb2
group by otherid) b
on a.otherid = b.otherid
order by b.mdt desc
;
于 2013-02-12T04:39:43.490 回答