我正在尝试选择每个用户的最近付款。我现在的查询选择了用户的第一笔付款。即如果用户进行了两次付款并且payment.id分别为10和11,则查询将选择信息为10而不是11的用户。

  SELECT users.*, payments.method, payments.id AS payment_id
    FROM `users`
         LEFT JOIN `payments` ON users.id = payments.user_id
GROUP BY users.id

我已经添加了ORDER BY payments.id,但是查询似乎忽略了它,仍然选择了第一笔付款。

所有帮助表示赞赏。
谢谢。

最佳答案

你想要groupwise maximum;本质上,将付款表分组以标识最大记录,然后将结果与其自身重新结合以获取其他列:

SELECT users.*, payments.method, payments.id AS payment_id
FROM   payments NATURAL JOIN (
  SELECT   user_id, MAX(id) AS id
  FROM     payments
  GROUP BY user_id
) t RIGHT JOIN users ON users.id = t.user_id

请注意,取决于您的应用程序和架构,MAX(id)可能不是“最新付款”:通常,基于TIMESTAMP确定“最新”要比基于合成标识符(例如AUTO_INCREMENT主键列)更好。

关于mysql - 在MySQL中使用GROUP BY选择最近的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5688063/

10-11 20:25
查看更多