select m.* from (select r.tid as id ,z.*,row_number()over(partition by z.tid order by sys_guid()) rn from p_zxts z left join p_zxts_reply r on z.tid=r.questionid )m where rn=1 order by m.datetime desc
2、利用group by的方法
select p.*,m.id from p_zxts p inner join(select z.tid,max(r.tid) as id from p_zxts z left join p_zxts_reply r on z.tid=r.questionid group by z.tid)m on p.tid=m.tid
第二种应该是比较常用一些
查询及删除数据库中的重复记录
有张表pepole ,字段有pepoleID .name ,addree
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) >
1
)
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) >
1
)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>
1
)
3、查找表中多余的重复记录(多个字段)
select * from people a
where (a.peopleId,a.name) in (select peopleId,name from vitae group by peopleId,name having count(*) >
1
)
4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete from people a where (a.peopleId,a.name) in (select peopleId,namefrom vitae group by peopleId,namehaving count(*) > 1) and rowid not in (select min(rowid) from namegroup by peopleId,namehaving count(*)>1)