我正在尝试选择每个用户的最新付款。我现在的查询选择了用户的第一笔付款。即,如果用户进行了两次付款,并且payment.ids分别为10和11,则查询将选择具有付款ID 10而不是11的信息的用户。
payment.id
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,但查询似乎忽略了它,仍然选择了第一笔付款。
ORDER BY payments.id
所有帮助表示赞赏。谢谢。
你要分组最大值 ; 本质上,将付款表分组以标识最大记录,然后将结果与其自身重新结合以获取其他列:
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主键列之类的综合标识符。
MAX(id)
TIMESTAMP
AUTO_INCREMENT