可以在where子句中使用分区来更新表吗?



我有一个查询:

SELECT *, ORDER = MAX(ORDER) OVER (PARTITION BY ID)
FROM MY TABLE

MY_TABLE当前位置

<表类>ID为年龄最近的tbody><<tr>123450对994117真正123424真正994212对123315真正123338真正

试试这个:

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>123450对994117假123424真正994212对123315假123338假

最新更新