mysql 一对多连接最后一条记录

nha*_*ink 6 mysql sql join

我正在处理一个查询,其中我将两个表连接到两个 id 上。两个表之间存在一对多关系,我想从第二个表中获取最后一条记录。我在SQLfiddle
上放了一个示例,在这里您可以看到我获取了第二个表的第一条记录: - one - uno - Primary 我想要基于时间(或时间修改)的最后一条记录,即: - Two - quatro -三元的







这些表看起来像这样:

---------------------
|id1|id2|randomvalue|
---------------------
|55 |87 |nise       |
|55 |88 |nape       |
|55 |89 |nusq       |
---------------------

------------------------
|id1|id2|content  |time|
------------------------
|55 |87 |one      |111 |
|55 |87 |two      |128 |
|55 |88 |uno      |321 |
|55 |88 |dos      |322 |
|55 |88 |tres     |384 |
|55 |88 |quatro   |390 |
|55 |89 |primary  |730 |
|55 |89 |secundary|733 |
|55 |89 |trinary  |788 |
------------------------
Run Code Online (Sandbox Code Playgroud)

我为获取第一条记录而编写的查询:

SELECT one.id1, one.id2, two.content
FROM table1 AS one
JOIN table2 AS two ON one.id1=two.id1 AND one.id2=two.id2
GROUP BY two.id2
Run Code Online (Sandbox Code Playgroud)

我尝试过分组和/或排序时间但无济于事,我对 SQL 的了解就到此为止。

(是的,我知道这个查询似乎没什么用,因为我没有结合很多信息,但在我的实际数据库中还有更多的列(和行))

Gor*_*off 4

使用附加项group by来获取最后一条记录:

SELECT one.id1, one.id2, two.content
FROM table1 one JOIN
     table2 two
     ON one.id1 = two.id1 AND one.id2 = two.id2 JOIN
     (SELECT t.id2, MAX(time) as maxt
      FROM table2 t
      GROUP BY t.id2
     ) t
     ON two.id2 = t.id2 and two.time = maxt
Run Code Online (Sandbox Code Playgroud)

  • 这确实有效,但是表一有 380 万条记录,表二有 850 万条记录,我不知道数据库是否可以处理这个 (2认同)