我正在尝试选择每个用户的最近付款。我现在的查询选择了用户的第一笔付款。即如果用户进行了两次付款并且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/