SQL语句:对重复字段的记录,只保留时间最新的一条记录

select t.*, t.rowid from MHQC04_NORMLIZE t where st_no = 'HQ4M61WW ' order by timecreated desc 根据上面表字段和表名称,oracle语句,功能为,对于st_no重复的记录,只保留timecreated时间最新的一条,其余的删除。

DELETE FROM MHQC04_NORMLIZE
WHERE rowid IN (
    SELECT rowid
    FROM (
        SELECT rowid,
               ROW_NUMBER() OVER (PARTITION BY st_no ORDER BY timecreated DESC) AS rn
        FROM MHQC04_NORMLIZE
        WHERE st_no = 'HQ4M61WW            '
    )
    WHERE rn > 1
);

这条SQL语句实现了对于st_no重复的记录,只保留timecreated时间最新的一条,其余的删除的功能。让我解释一下这条SQL语句的各个部分:

1. `DELETE FROM MHQC04_NORMLIZE`: 这部分指定了要对哪个表进行删除操作,即MHQC04_NORMLIZE表。

2. `WHERE rowid IN (...)`: 这部分指定了要删除的记录的条件,即满足括号内子查询返回的rowid列表中的记录将被删除。

3. `SELECT rowid, ROW_NUMBER() OVER (PARTITION BY st_no ORDER BY timecreated DESC) AS rn FROM MHQC04_NORMLIZE WHERE st_no = 'HQ4M61WW           '`: 这部分是子查询,它首先根据st_no进行分组(PARTITION BY st_no),然后按照timecreated字段降序排序(ORDER BY timecreated DESC),并为每个分组中的记录赋予一个行号(ROW_NUMBER()函数)。这样,每个st_no分组中的记录按照timecreated时间的倒序排列,最新的记录行号为1。

4. `WHERE rn > 1`: 这部分在子查询的结果上加了一个条件,只选择行号大于1的记录,即保留每个st_no分组中时间最新的记录(行号为1),而删除其余的重复记录。

因此,这条SQL语句的作用是删除MHQC04_NORMLIZE表中st_no为'HQ4M61WW            '的重复记录,只保留每个st_no分组中时间最新的一条记录。

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AAA_li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值