Sql 使用rownum和order by更新Oracle表
我试图更新oracle表中的一个字段,但我只想根据order by creationdate字段升序更新75行 这是我到目前为止所做的,但它不起作用Sql 使用rownum和order by更新Oracle表,sql,oracle,Sql,Oracle,我试图更新oracle表中的一个字段,但我只想根据order by creationdate字段升序更新75行 这是我到目前为止所做的,但它不起作用 UPDATE extractcandidate SET process = 15 WHERE process IN (Select process from extractcandidate where process = 1500 and rownum <=75 order by creationdate); 要使方法正常工作,您还需要一
UPDATE extractcandidate
SET process = 15
WHERE process IN
(Select process from extractcandidate where process = 1500 and rownum <=75 order by creationdate);
要使方法正常工作,您还需要一个子查询:
UPDATE extractcandidate
SET process = 15
WHERE ec.process = 1500 AND
creationdate IN (SELECT ec.creationdate
FROM (SELECT ec.*
FROM extractcandidate ec
WHERE ec.process = 1500
ORDER BY ec.creationdate
)
WHERE rownum <= 75
);
注:
您需要在使用rownum之前进行排序。
比较需要在创建日期进行,而不是进程。
正如@Gordon提到的,您需要在ROWNUM之前完成订单 首先,按creationdate排序: 其次,将数量限制在75:
SELECT *
FROM (
SELECT *
FROM extractcandidate
WHERE process=1500
ORDER BY creationdate
)
WHERE rownum <= 75;
第3行错误:ORA-00932:不一致的数据类型:预期的日期得到了奇怪的数字,出于某种原因,它更新了84行。不确定原因??假设您希望将更新限制为process=1500,尽管您的原始问题中没有提到这一点。
SELECT *
FROM (
SELECT *
FROM extractcandidate
WHERE process=1500
ORDER BY creationdate
)
WHERE rownum <= 75;
UPDATE extractcandidate
SET process=15
WHERE rowid IN (
SELECT ri
FROM (
SELECT rowid as ri
FROM extractcandidate
WHERE process=1500
ORDER BY creationdate
)
WHERE rownum <= 75
);