【发布时间】:2020-05-20 11:53:04
【问题描述】:
表名:table_one 列:(id、ref_id、时间戳)
| **id** | **ref_id** | **timestamp** |
| 1 | 111 | 2020-04-27 02:59:45 |
| 2 | 111 | 2020-04-28 02:59:45 |
| 3 | 111 | 2020-04-26 02:59:45 |
我想实现类似的东西
DELETE
FROM (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY red_id ORDER BY TIMESTAMP DESC) AS rn
FROM table_one
).
s
WHERE r.rn != 1;
执行上述删除查询后的表 table_one 应该是这样的
| **id** | **ref_id** | **timestamp**
| 2 | 111 | 2020-04-28 02:59:45 |
我已尝试选择删除所需的行,但未获得正确的行号。请在下面找到我的查询:
SET @row_number : = 0;
SELECT *
FROM (
SELECT @row_number: = CASE
WHEN @ci = ref_id THEN @row_number + 1
ELSE 1
END AS rn,
@ci: = ref_id ref_id,
id,
TIMESTAMP
FROM table_one
ORDER BY
TIMESTAMP DESC
提前致谢。
【问题讨论】: