有一表,corp_info
有字段,corp_id,corp_name,但由于误输入等造成相同的corp_id,却有不同的corp_name,
我想取出corp_id和相同corp_id的corp_name中corp_name最长的一个出来,
这个sql要怎么写?
有字段,corp_id,corp_name,但由于误输入等造成相同的corp_id,却有不同的corp_name,
我想取出corp_id和相同corp_id的corp_name中corp_name最长的一个出来,
这个sql要怎么写?
*
from
(
select a.*,row_number() over(partition by a.corp_id order by length(a.corp_name)) rn
from corp_info a) b
where b.rn>1其实以后,你这个表以CORP_ID做个主键,就不会产生这个情况了
不过楼主只要取出一个最长的,如果重复数量超过2个,上面的语句会有点问题
order by length(a.corp_name)后面加个desc
rn>1改成rn=1
(SELECT corp_id, corp_name, RANK() OVER(PARTITION BY corp_id ORDER BY LENGTH(corp_name) DESC) rn
FROM corp_info)
WHERE rn = 1;
SELECT corp_id,corp_name,ROW_NUMBER() OVER(PARTITION BY corp_id ORDER BY LENGTH(corp_name) DESC) rn FROM corp_info
) WHERE rn = 1;
group by t.corp_id) a
where b.corp_id=a.id
and length(b.corp_name ) = a.num