gpt4 book ai didi

sql - Oracle 根据 order by 更新前 20 条记录

转载 作者:行者123 更新时间:2023-12-02 03:34:18 26 4
gpt4 key购买 nike

我有这张表,我正在尝试更新其中的一列。问题是有 40 条记录,我按影响排序。然后,我想选取其中的前 10 名(根据其影响)并更新它们

UPDATE mytable
SET status = 'red'
WHERE status IN
(

SELECT status
FROM (
SELECT *
FROM mytable
WHERE status = 'green'
ORDER BY impact DESC
)
)
AND ROWNUM <= 10

我尝试将 ROWNUM 放入 WHERE IN 语句中,但它只会忽略它并更新所有 40 条记录。当我按照上面的方式进行操作时,它会选择 10 个,但不会选择前 10 个,而是随机选择它们。我猜它忽略了 ORDER BY 的影响。

我尝试搜索类似的问题,但找不到任何内容。任何帮助深表感谢!

最佳答案

如果是我,我会使用dense_rank您可能会遇到一种边缘情况,其中多行的影响相同,因此您可能会获得超过 40 行

不确定状态是您想要的实际列,就像您可能希望 PK 驱动更新的其他答案一样

UPDATE mytable
SET status = 'red'
WHERE status IN
(

SELECT status
FROM (
SELECT status, dense_rank() over (order by impact desc) color_rank
FROM mytable
WHERE status = 'green'
)
where color_rank <= 40
)

关于sql - Oracle 根据 order by 更新前 20 条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50820874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com