这是表格结构
我在这里使用付款类型来确定交易类型
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
但是当我试图概括查询时,我被卡住了导致负责返回upay_id的最大值为子状态= 2的子查询在单个用户的情况下仅返回一行,因为我指定了用户id
但是做什么?如果我想要退还每个用户只需一次的预付款吗?
答案 0 :(得分:2)
您可以将子查询移动到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