我有一个查询:
SELECT *, ORDER = MAX(ORDER) OVER (PARTITION BY ID)
FROM MY TABLE
MY_TABLE当前位置
<表类>ID 为 年龄最近的 tbody><<tr>12 34 50 对 99 41 17 真正 12 34 24 真正 99 42 12 对 12 33 15 真正 12 33 38 真正 表类>
试试这个:
update my_table
set recent = false
where (id, order) not in (select id, max(order) from my_table group by 1);
正如@Tim Biegeleisen所建议的,将此作为更新运行可能不是最好的主意。不需要更新表,您可以在表上方创建一个视图,以便始终显示最新信息,而无需更新表。这消除了在添加新值和执行更新过程之间RECENT
列过期的风险。
CREATE TABLE my_tbl (id NUMBER, "ORDER" NUMBER, age NUMBER);
INSERT INTO my_tbl VALUES
(12, 34, 50),
(99, 41, 17),
(12, 34, 24),
(99, 42, 12),
(12, 33, 15),
(12, 33, 38);
CREATE OR REPLACE VIEW my_view AS
SELECT
*,
"ORDER" = MAX("ORDER") OVER (PARTITION BY ID) AS RECENT
FROM
my_tbl
;
输出如下:
<表类>ID 为 年龄最近的 tbody><<tr>12 34 50 对 99 41 17 假 12 34 24 真正 99 42 12 对 12 33 15 假 12 33 38 假 表类>