前言:
最近在迁移mule项目到xxl-job中,遇到了将数据去重,并返回所有字段。
mule项目中的
看到去重,我们一般会想到distinct或者group by ,但这种方式不太符合业务需求,只能返回去重的字段。
Tip:其中在MySQL中可以使用 group by 和group_concat(‘,’) 实现多字段去重,并返回所有其他字段。
-- mysql中可以使用group by和group_concat(',')去重并返回多个字段
select credate,callno,group_concat(',') msgid from zx_chl_callmsg_doc z where 1=1 group by z.credate ,z.callno
解决方案:
-- oracle根据多个字段去重,并返回所有字段,partition by为要去重的字段,
select * from (
select z.*,row_number() over(partition by credate,callno order by credate desc) rn from zx_chl_callmsg_doc z
) tmp where tmp.rn =1
PARTITION BY 后面可以跟多个字段,依据该字段对结果集进行重新分组,后面的ORDER BY是指定对应字段排序,然后ROW_NUMBER()对重新分组的结果集进行编号,rn = 1表示重新分组后的结果集每组数据内部的编号,为1表示如果重新分组结果集存在多条时只取第一条。
评论前必须登录!
注册