请教一个查询问题,实在搞不定了,谢谢帮忙!

gang75 2005-12-19 02:45:32
表A
ID 手机号码 拨打次数
1 13233333331 123
2 13333333332 456
3 13333333333 321
4 13233333331 999
5 13233333331 111
6 13333333332 555
7 13111111113 555
8 13111112114 555

表B
手机号码
13111111
13111112


有一个表(A)有10万条记录,里面有重复手机号码的记录,重复次数有多有少,
我现在要做这样的统计,就是统计表A,要求手机号码不重复,有重复的手机号码取
拨打次数最多一个,而且手机号码不能属于表B中数据的手机段
(比如:表A中的7、8的手机好就属于表B中),这里可以使用模糊查询描述
手机号码 like '13111111%'

查询过程
ID 手机号码 拨打次数
1 13233333331 123 ×-重复3次,最大拨大次数是999 ,这条过滤
2 13333333332 456 ×-重复2次,最大拨大次数是555 ,这条过滤
3 13333333333 321 √-没有重复
4 13233333331 999 √-重复3次,是最大拨大次数
5 13233333331 111 ×-重复3次,最大拨大次数是999 ,这条过滤
6 13333333332 555 √-重复2次,是最大拨大次数
7 13111111113 555 ×属于表B中的手机段
8 13111112114 555 ×属于表B中的手机段

根据上面的过程,得到查询结果:
ID 手机号码 拨打次数
3 13333333333 321 √-没有重复
4 13233333331 999 √-重复3次,是最大拨大次数
6 13333333332 555 √-重复2次,是最大拨大次数


谢谢大家!
...全文
169 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
unlme 2005-12-19
  • 打赏
  • 举报
回复
select max(拨打次数) from 表A

where not exists (select 手机号码 from 表B where 表A.手机号码 like 表B.手机号码+'%')

group by 手机号码
zhaoanle 2005-12-19
  • 打赏
  • 举报
回复
--测试数据
create table 表A(id int,手机号码 bigint,拨打次数 int)

create table 表B(手机号码 bigint)

insert 表B values(13111111)
insert 表B values(13111112)

insert 表A values(1, 13233333331, 123)
insert 表A values(2 , 13333333332 , 456)
insert 表A values(3 , 13333333333 , 321 )
insert 表A values(4 , 13233333331 , 999)
insert 表A values(5 , 13233333331 , 111 )
insert 表A values(6 , 13333333332 , 555 )
insert 表A values(7 , 13111111113 , 555)
insert 表A values(8 , 13111111113 , 555)

--查询
select max(a.id) as id,b.* from 表A a,
(select 手机号码,max(拨打次数) as '拨打次数',
(case when count(1)>1 then '重复'+ cast(count(1) as varchar(10)) +'次,是最大拨打次数' else '没有重复' end ) as '备注'
from 表A where left(手机号码,8) not in(select 手机号码 from 表B)
group by 手机号码) b
where a.手机号码=b.手机号码 and a.拨打次数=b.拨打次数
group by b.手机号码,b.拨打次数,b.备注
order by id
--结果
id 手机号码 拨打次数 备注
----------- ------------------ ----------- -------------------------------
3 13333333333 321 没有重复
4 13233333331 999 重复3次,是最大拨打次数
6 13333333332 555 重复2次,是最大拨打次数
gang75 2005-12-19
  • 打赏
  • 举报
回复
谢谢!
cuckoojosh(明天的明天的明天)

真是不好意思,还有一点没有说,请原谅
手机号码段的长度不一定的,
13111111
13111112
是我随便写的,也可能是1311 或者 131111111

不好意思!!!呵呵
cuckoojosh 2005-12-19
  • 打赏
  • 举报
回复
写错了,不好意思
select ID , 手机号码 , max(拨打次数) from a join b on
a.手机号码 < b.手机号码 * 1000 and a.手机号码 > (b.手机号码 * 1000 + 999) group by 手机号码
cuckoojosh 2005-12-19
  • 打赏
  • 举报
回复
select ID , 手机号码 , max(拨打次数) from a join b on
a.手机号码 < b.手机号码 * 1000 and a.手机号码 < (b.手机号码 * 1000 + 999) group by 手机号码
gang75 2005-12-19
  • 打赏
  • 举报
回复
谢谢! wfliu()

还是有问题,
可能没有描述清楚,不好意思,呵呵!

not in (select 手机号码 from b)
好象不行的,因为表B中的手机号码是手机号码段,也就是说
13111111113 比
13111111 长度长一些,不能使用not in 要使用模糊查询

wfliu 2005-12-19
  • 打赏
  • 举报
回复
select ID , 手机号码 , max(拨打次数) from a where 手机号码 not in (select 手机号码 from b) group by 手机号码

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧