加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在oracle sql中更新:1个表中的多行

发布时间:2020-12-12 12:52:39 所属栏目:百科 来源:网络整理
导读:我是SQL的新手,我对更高级的查询和函数不满意. 所以,我有这个1表与销售: id date seller_name buyer_name---- ------------ ------------- ------------ 1 2015-02-02 null Adrian 1 2013-05-02 null John B 1 2007-11-15 null Chris F 2 2014-07-12 null J
我是SQL的新手,我对更高级的查询和函数不满意.

所以,我有这个1表与销售:

id   date         seller_name   buyer_name
---- ------------ ------------- ------------
 1    2015-02-02   null          Adrian
 1    2013-05-02   null          John B
 1    2007-11-15   null          Chris F
 2    2014-07-12   null          Jane A
 2    2011-06-05   null          Ted D
 2    2010-08-22   null          Maryanne A
 3    2015-12-02   null          Don P
 3    2012-11-07   null          Chris T
 3    2011-10-02   null          James O

我想通过将来自先前销售的buyer_name作为vendor_name更新为更新的销售日期来更新每个ID的seller_name.例如,对于id 1,John B将在2015-02-02成为卖家,并在2013-05-02成为买家.那有意义吗?

附:这是一个完美的案例,桌子很大,而且ids没有那么整齐.

解决方法

merge into your_table a 
using ( select rowid rid,lead(buyer_name,1) over (partition by id order by date desc) seller
        from   your_table 
       ) b
       on (a.rowid = b.rid )
when matched then update set a.seller_name= b.seller;

Explanation:Merge into语句根据匹配或不匹配的标准执行不同的操作.在这里,您必须合并到您的表中,在使用中具有您想要采用的新值以及将作为匹配键的rowid.前导函数从后续n行获取结果,具体取决于您在逗号后指定的数字.在指定要跳转的行数后,您还要指定要在哪个部分上工作,在您的情况下,按ID分区并按日期排序,这样您就可以获得卖家,即前任买家.希望这有点清除它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读