SQL去重,保留时间最近的一条记录

img

上图为部份数据,重复记录有很多。若表名为:kcsw ,只保留KCSW_WLID对应的KCSW_RKRQ最近时间的一条记录,你推荐的查询语句是?

1、拿到每个KCSW_WLID的最大KCSW_RKRQ, 标识为XXX
比如 select KCSW_WLID,max(KCSW_RKRQ) from ZZZ group by KCSW_WLID

2、关联删除,ID相等,但日期小于最大日期的数据
delete XXX from XXX,YYY where XXX.KCSW_WLID=YYY.KCSW_WLIDand XXX.KCSW_RKRQ< YYY.KCSW_RKRQ
这个语法你根据数据库不同,自行调整吧。

这种情况可以使用group by及having条件处理。

按KCSW_WLID、日期排序。然后distinct去重

直接使用row_number窗口函数就可以了,以时间做降序排序,取排名第一的