我有一个包含重复 user_ids 的表,与任务和付款具有多对一关系。
我对任务使用了分组最大值来返回任务完成百分比最高的行。不过,我想用同一个表中最高的付款完成统计数据来更新这个新表。
例如:
id date taskid payid task_completion pay_value
4722 2007-11-08 16:20:14 2 3 7.14 0
4722 2007-11-08 16:20:14 3 3 0.00 0
4722 2007-11-08 16:20:14 5 3 0.00 0
4722 2007-11-08 16:20:14 2 6 7.14 40
4722 2007-11-08 16:20:14 3 6 0.00 40
4722 2007-11-08 16:20:14 5 6 0.00 40
4724 2007-11-20 15:32:40 4 7 25.71 105
4726 2008-01-28 11:44:50 7 8 7.14 52
4726 2008-01-28 11:44:50 8 8 34.29 52
4726 2008-01-28 11:44:50 10 8 65.71 52
4726 2008-01-28 11:44:50 7 9 7.14 24
4726 2008-01-28 11:44:50 8 9 34.29 24
因此,我在任务完成时使用了分组最大值来创建一个新表(具有唯一的 ID),如下所示:
id date taskid payid task_completion pay_value
4722 2007-11-08 16:20:14 2 3 7.14 0
4724 2007-11-20 15:32:40 4 7 25.71 105
4726 2008-01-28 11:44:50 10 8 65.71 52
问题在于,对于 id 4722,最高的 pay_value 和 payid 尚未插入到结果表中。
我想在表单中更新此内容(使用此选择):
SELECT
s1.payid,
s1.pay_value,
FROM
f_tbl s1
LEFT JOIN
f_tbl s2 ON s1.cashid = s2.cashid
AND s1.pay_value > s2.pay_value
WHERE
s2.cash_id IS NULL
GROUP BY user_id;
但是,似乎不可能根据此查询更新最终表。 我很困惑,谢谢您的帮助。
最佳答案
您需要在 update
中加入join
才能执行此操作。假设您的查询是正确的:
update SummaryTable st cross join
(SELECT s1.payid, s1.pay_value,
FROM f_tbl s1 LEFT JOIN
f_tbl s2
ON s1.cashid = s2.cashid AND s1.pay_value > s2.pay_value
WHERE s2.cash_id IS NULL
GROUP BY user_id
) toupdate
set st.payid = toupdate.payid,
st.pay_value = toupdate.pay_value
where st.taskid = 4722;
关于mysql - 使用分组最大 MYSQL 更新表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18206959/