我将事务存储在一个表中,我想删除所有事务(按user_id分组),除了金额最大的事务,这是一个示例表:
+----+---------+--------+
| id | user_id | amount |
+----+---------+--------+
| 1 | 1 | 10 |
+----+---------+--------+
| 2 | 1 | 20 |
+----+---------+--------+
| 3 | 1 | 30 |
+----+---------+--------+
| 4 | 2 | 50 |
+----+---------+--------+
| 5 | 2 | 100 |
+----+---------+--------+
| 6 | 3 | 2 |
+----+---------+--------+
| 7 | 3 | 4 |
+----+---------+--------+
我想要以下结果
+----+---------+--------+
| id | user_id | amount |
+----+---------+--------+
| 3 | 1 | 30 |
+----+---------+--------+
| 5 | 2 | 100 |
+----+---------+--------+
| 7 | 3 | 4 |
+----+---------+--------+
我试过了
DELETE FROM `transactions`
WHERE `user_id` NOT IN (
SELECT `user_id`
FROM (
SELECT MAX(`amount`) AS ts
FROM `transactions` e
WHERE `user_id` = `user_id`
) s
WHERE ts = `transactions`.`amount`
)
ORDER BY `transactions`.`user_id` ASC
DELETE FROM `transactions`
WHERE id NOT IN
(
SELECT MAX(id)
FROM `transactions`
group by user_id
)
内部查询由每个用户分组,并且仅为每个用户选择最高ID。从内部选择中删除除ID以外的所有记录。
不确定你是什么意思except the latest one
所以我考虑except last record inserted
因此使用ORDER BY id DESC
DELETE FROM `transactions`
WHERE `id` NOT IN (
SELECT `id`
FROM `transactions`
GROUP BY `user_id`
ORDER BY `id` DESC
)