当前位置: 代码迷 >> Sql Server >> 按金额高下选出一定人数,可又要保证手机号不重复
  详细解决方案

按金额高下选出一定人数,可又要保证手机号不重复

热度:73   发布时间:2016-04-24 09:36:28.0
按金额高低选出一定人数,可又要保证手机号不重复
有表可能有几万数据,大致如下
会员号    手机                 年消费额
1               137XXXX9090              1120
2                137XXXX9127              9082
3                189xxxx8021                123




其中会员号是unique的,手机号可能相同。
现要求选出一定会员,比如1000人,要求是年消费额最高的1000人,可手机号不能重复,重复的补足1000人。比如,如果年消费额最高的1000人拉出来有999个distinct 的会员手机 ,其中重复手机号的记录为
会员号    手机                 年消费额
190            156XXXX2766               10000
870            156XXXX2766                22222
则剔除会员号为190的那条记录,由手机号与这1000人(999个distinct的手机号)不同的年消费额最高的人补进去。


------解决思路----------------------
SELECT TOP 1000 * FROM
(SELECT ROW_NUMBER()OVER(PARTITION BY 手机 ORDER BY 年消费额 DESC)RN,* FROM TB)T
WHERE RN=1
ORDER BY 年消费额 DESC

------解决思路----------------------
select top 1000  * from 
(
select * from tb as t where not exists(select 1 from tb where 手机=t.手机 and 年消费额>t.年消费额)
) as t
order by 年消费额 desc
  相关解决方案