Was*_*sim 83 mysql sql select inner-join
我有一个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
Run Code Online (Sandbox Code Playgroud)
Joh*_*Woo 124
您需要有一个子查询来获取最新的日期user 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
Run Code Online (Sandbox Code Playgroud)
Fin*_*sse 18
SELECT u.*, p.*
FROM users AS u
INNER JOIN payments AS p ON p.id = (
SELECT id
FROM payments AS p2
WHERE p2.user_id = u.id
ORDER BY date DESC
LIMIT 1
)
Run Code Online (Sandbox Code Playgroud)
此解决方案比公认的答案更好,因为当一些付款的用户和日期相同时,它可以正常工作。
Mat*_*hai 12
SELECT u.*, p.*, max(p.date)
FROM payments p
JOIN users u ON u.id=p.user_id AND u.package = 1
GROUP BY u.id
ORDER BY p.date DESC
Run Code Online (Sandbox Code Playgroud)
看看这个sqlfiddle
归档时间: |
|
查看次数: |
169711 次 |
最近记录: |