这是表结构
这里我使用支付类型来确定交易类型
1 - 预付款
2 - 付款
这是示例数据
SELECT SUM(upay_amount)
FROM user_payment
WHERE upay_status=1 AND upay_id >
(
SELECT MAX(upay_id) FROM user_payment WHERE upay_usr_id=3 AND upay_status=2
)
AND upay_usr_id=3
GROUP by upay_usr_id
输出效果很好
438359
但是当我尝试概括查询时,我陷入困境,因为负责返回 status=2 的 upay_id 最大值的子查询在单个用户的情况下仅返回一行,因为我指定了用户 ID
但是该怎么办?如果我想退还每个用户而不是一个用户支付的预付款?
最佳答案
您可以将子查询移至 FROM 并添加 GROUP BY 用户 ID 来查找每个用户的最大值。然后加入它并在 WHERE 中使用 MAX。像这样
SELECT SUM(upay_amount)
FROM user_payment up INNER JOIN (
SELECT upay_usr_id, MAX(upay_id) grMax
FROM user_payment
WHERE upay_status=2
GROUP BY upay_usr_id
) gr ON up.upay_usr_id=gr.upay_usr_id
WHERE upay_status=1 AND upay_id > gr.grMax
GROUP BY up.upay_usr_id
关于选择多用户高级付款时 MySQL 查询失败,但对于单用户来说效果很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34148613/