MySQL - 按单独表中的值排序

时间:2013-02-12 04:21:15

标签: mysql sql aggregate-functions greatest-n-per-group

我有两个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中的每一行,按照tableid中最近的行的时间顺序排序。 在我的例子中,这是我想要的结果:

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

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

6 个答案:

答案 0 :(得分: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 Demo

答案 1 :(得分: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

答案 2 :(得分:0)

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

离。 MAX(time)

答案 3 :(得分:0)

SELECT
    Table1.id, name, MAX(time)
FROM
    Table1
    JOIN Table2 USING (otherid)
GROUP BY
    otherid
ORDER BY
    time DESC

答案 4 :(得分:0)

SELECT DISTINCT(table1.id),table1.name,table2.time FROM table1 
LEFT JOIN table2 ON table1.otherid=table2.otherid
ORDER BY table2.time DESC;

答案 5 :(得分: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
;