表明(CICI_CESHI)
IDS NAMES TEACHERNAME SEX CLASSROOM (列名)
1 测试1名字 null 男 null (数据1)
1 测试1名字 测试1老师 男 测试1房间 (数据2)
2 测试2名字 测试2老师 女 测试2房间 (数据3)
3 测试3名字 测试3老师 女 测试3房间 (数据4)
3 测试3名字 测试3老师 女 测试3房间 (数据5)
3 测试3名字 测试3老师 女 测试3房间 (数据6)前提上面这几个数据总是测试用的,真正的数据上万条。删除多余的我打个比方:
删除重复数据1,5和6。删除1是因为数据2比数据1的内容全,数据4,5,6因为数据内容一样,所以删除那两个都无所谓。
请各位高手帮帮忙,谢谢了,把具体的sql语句写下。谢谢了。跪求可以解决的sql语句。
IDS NAMES TEACHERNAME SEX CLASSROOM (列名)
1 测试1名字 null 男 null (数据1)
1 测试1名字 测试1老师 男 测试1房间 (数据2)
2 测试2名字 测试2老师 女 测试2房间 (数据3)
3 测试3名字 测试3老师 女 测试3房间 (数据4)
3 测试3名字 测试3老师 女 测试3房间 (数据5)
3 测试3名字 测试3老师 女 测试3房间 (数据6)前提上面这几个数据总是测试用的,真正的数据上万条。删除多余的我打个比方:
删除重复数据1,5和6。删除1是因为数据2比数据1的内容全,数据4,5,6因为数据内容一样,所以删除那两个都无所谓。
请各位高手帮帮忙,谢谢了,把具体的sql语句写下。谢谢了。跪求可以解决的sql语句。
from (select t.ids,
t.names,
t.teachername,
t.sex,
t.classroom,
row_number() over(partition by t.ids order by t.ids, t.names nulls last, t.teachername nulls last, t.sex nulls last, t.classroom nulls last) rn
from CICI_CESHI t)
where rn = 1;
1 测试1名字 null 男 测试1房间 (数据1)
1 测试1名字 测试1老师 男 null (数据2)
1 测试1名字 测试1老师 null 测试1房间 (数据3)
where a.IDS=b.IDS and a.NAMES=b.NAMES and a.rowid>b.rowid)or
delete from CICI_CESHI a
where a.rowid not in(select max(b.rowid) from CICI_CESHI b group by b.IDS,b.NAMES)
1 测试1名字 null 男 测试1房间 (数据1)
1 测试1名字 测试1老师 null null (数据2)好像你这个不确定NAMES TEACHERNAME SEX CLASSROOM 的哪些是比较全的吧
你这个内容全,有点无规则?
如果只是为了修正数据不是一个常态操作可以采用中间建立一个临时表
create table tmp_1 as select distinct * from CICI_CESHI ;
然后清空CICI_CESHI
再insert into CICI_CESHI select * from tmp_1;
IDS NAMES TEACHERNAME SEX CLASSROOM (列名)
1 测试1名字 测试1老师 男 null (数据1)
1 测试1名字 测试1老师 男 测试1房间 (数据2)
2 测试2名字 测试2老师 女 测试2房间 (数据3)
3 测试3名字 测试3老师 女 测试3房间 (数据4)
3 测试3名字 测试3老师 女 测试3房间 (数据5)
3 测试3名字 测试3老师 女 测试3房间 (数据6)除了classroom这个列,其他都是必填项。要是删除数据1和数据2的时候,判断classroom是否为空,删除为空的。如果都为空的话,随便删除一个就可以了。 不好意思。
select *
from (select t.ids,
t.names,
t.teachername,
t.sex,
t.classroom,
row_number() over(partition by t.ids order by t.classroom nulls last) rn
from CICI_CESHI t)
where rn = 1;