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分组中时间最新的一条记录。
标签:timecreated,no,NORMLIZE,记录,MHQC04,st,字段,rowid,SQL From: https://blog.csdn.net/AAA_li/article/details/136969121