我有一个 users
表和一个 payments
表,对于每个有付款的用户,可能在 payments中有多个关联的付款
表。我想选择所有有付款的用户,但只选择他们最近一次付款。我正在尝试这个 SQL,但我以前从未尝试过嵌套 SQL 语句,所以我想知道我做错了什么。感谢帮助
SELECT u.*
FROM users AS u
INNER JOIN (
SELECT p.*
FROM payments AS p
ORDER BY date DESC
LIMIT 1
)
ON p.user_id = u.id
WHERE u.package = 1
最佳答案
您需要有一个子查询来获取每个用户 ID
的最新日期。
SELECT a.*, c.*
FROM users a
INNER JOIN payments c
ON a.id = c.user_ID
INNER JOIN
(
SELECT user_ID, MAX(date) maxDate
FROM payments
GROUP BY user_ID
) b ON c.user_ID = b.user_ID AND
c.date = b.maxDate
WHERE a.package = 1
关于MySQL INNER JOIN 从第二个表中只选择一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12526194/