我有这张桌子:
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不应更改。该怎么做??
答案 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
);