如何在Oracle SQL中更新多个重复行的单行

时间:2018-08-16 11:43:30

标签: sql oracle

我有这张桌子:

group_id | invoice_amt|insert_date
---------+------------+------
23        1002         10/8/2018
23        1002         10/8/2018
23        1003         11/8/2018
21        1004         12/8/2018

当我使用以下查询时,

select distinct group_id, invoice_amt, insert_date 
from table

我要获得最后3行。但是我需要全部四行。为此,我需要通过更改日期来更新最上面一行的行之一。 Group_id和invoice_amt不应更改。该怎么做??

2 个答案:

答案 0 :(得分:1)

如果需要全部四行,只需删除DISTINCT,因为它会强制使用唯一的记录集:

select group_id, invoice_amt, insert_date from table

如果您需要更改所有重复项的日期,但是需要更改一个值,并且表本身没有唯一标识符,则可以使用内部Oracle伪列ROWID

update table t
set insert_date = < your date here >
where rowid < (
  select max(rowid)
  from table t2
  where t.group_id = t2.group_id
    and t.invoice_amt = t2.invoice_amt
  );

答案 1 :(得分:1)

像这样吗?

update t
    set insert_date = insert_date + 1
    where rowid > (select min(rowid)
                   from t t2
                   where t2.group_id = t.group_id and t2.invoice_amt = t.invoice_amt
                  );