oracle 消除重复项并检索每个eff_date分区的max(id0

dl5txlt9  于 2023-03-29  发布在  Oracle
关注(0)|答案(2)|浏览(105)

我有一个列为eff_datenameidbalance的表
| 生效日期|名称|身份证|天平|
| --------------|--------------|--------------|--------------|
| 1402/01/01|简体中文|一个|二十万|
| 1402/01/01|简体中文|拖|十八万|
| 1402/01/01|کوتاه مدت|三|二十万|
| 1402/01/01|简体中文|四|十八万|
| 1402/01/02|注意事项|五|十五万|
| 1402/01/02|注意事项|六|十八万|
| 1402/01/03|简体中文|七|二十万|
| 1402年1月3日|简体中文|八|二十八万|
id是自动递增的,但我们有2个记录为每个分区的eff_date。在表中重复发生在行3和4,所以我想在最后的表tbl_qry消除行1,2否则max(id)在每个分区的eff_date时,我们有一个重复,然后插入行3,4,5,6,7,8。
就像这样:
| 生效日期|名称|身份证|天平|
| --------------|--------------|--------------|--------------|
| 1402/01/01|کوتاه مدت|三|二十万|
| 1402/01/01|کوتاه مدت|四|十八万|
| 1402/01/02|注意事项|五|十五万|
| 1402/01/02|注意事项|六|十八万|
| 1402年1月3日|简体中文|七|二十万|
| 1402年1月3日|简体中文|八|二十八万|
我想写一个程序。这个解决方案的最佳想法是什么?

xzlaal3s

xzlaal3s1#

您可以使用group byMax()执行此操作

select eff_date, name , max(id) as id,  balance
from mytable
group by eff_date, name,  balance
vfhzx4xs

vfhzx4xs2#

(Date格式为YYYY/MM/DD)。
样本数据:

SQL> select * From test order by eff_date, id;

EFF_DATE   N         ID    BALANCE
---------- - ---------- ----------
1402/01/01 a          1        200
1402/01/01 a          2        180
1402/01/01 a          3        200
1402/01/01 a          4        180
1402/01/02 b          5        150
1402/01/02 b          6        180
1402/01/03 c          7        200
1402/01/03 c          8        280

8 rows selected.

(我假设ID不是一个数字的真正的 word 表示,也就是说不是“one”而是1,正如你所说的,它是自动递增的。即使它是,下面的查询也是一样的)。
删除重复项:

SQL> delete from test a
  2  where a.rowid < (select max(b.rowid)
  3                   from test b
  4                   where b.eff_date = a.eff_date
  5                     and b.name = a.name
  6                     and b.balance = a.balance
  7                  );

2 rows deleted.

结果:

SQL> select * From test order by eff_date, id;

EFF_DATE   N         ID    BALANCE
---------- - ---------- ----------
1402/01/01 a          3        200
1402/01/01 a          4        180
1402/01/02 b          5        150
1402/01/02 b          6        180
1402/01/03 c          7        200
1402/01/03 c          8        280

6 rows selected.

SQL>

相关问题