获取最大ID为

时间:2017-02-20 09:19:21

标签: mysql greatest-n-per-group

简单来说问题,第1个必须保持连接到记录最新的第2个表。所以,我使用函数MAX()

的方法

目前我有2张桌子。

匹配

enter image description here

matches_payments

enter image description here |

现在我想在matches_payments

上使用MAX(id)将第二个表连接到第一个表

期望的结果

enter image description here

但由于greatest-n-per-group问题,我没有得到理想的结果。

查询

SELECT matches.id, mp.*
FROM matches
  LEFT JOIN (SELECT
               MAX(id) AS id,
               match_id
               paymentStatus
             FROM matches_payments
             GROUP BY match_id) AS mp ON mp.id = matches.id;

由于:Stackoverflow Question

而未产生所需结果
  

使用此功能时,每个组中的所有行应与GROUP BY部分中省略的列具有相同的值。服务器可以自由地从组中返回任何值,因此除非所有值都相同,否则结果是不确定的。   来自MySQL Dev

PS :我知道桌子的设计很差。这不是我的工作,因为最后一位开发人员做了那些。

1 个答案:

答案 0 :(得分:1)

你需要两个连接。您需要matches_payments表的自联接才能获得每个match_id的ID最高的行,如SQL Select only rows with Max Value on a Column所示。然后你LEFT JOIN将这个matches组合成两个表:

SELECT m.*, mp.paymentStatus, mp.paymentAmount
FROM matches AS m
LEFT JOIN (
    SELECT mp1.*
    FROM matches_payments AS mp1
    JOIN (SELECT match_id, MAX(id) AS id
          FROM matches_payments
          GROUP BY match_id) AS mp2
    ON mp1.match_id = mp2.match_id AND mp1.id = mp2.id
) AS mp ON mp.match_id = m.id