删除除最大值之外的所有行

问题描述 投票:-8回答:2

我将事务存储在一个表中,我想删除所有事务(按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
mysql sql
2个回答
3
投票
DELETE FROM `transactions`
WHERE id NOT IN 
(
    SELECT MAX(id)
    FROM `transactions`
    group by user_id
)

内部查询由每个用户分组,并且仅为每个用户选择最高ID。从内部选择中删除除ID以外的所有记录。


1
投票

不确定你是什么意思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
)
© www.soinside.com 2019 - 2024. All rights reserved.