求大神 指点解决方案

qq_37682182 2017-02-27 04:23:41
我想写一个查询的sql
需求:


在一张1000w+的表里通过时间来获取一段数据源(D1),然后通过另外的时间段来获取另一段数据(D2),那两团数据做对比,查询去重(手机号)出D1里面 D2不存在的数据
(细化 :如果D1里有的手机号 然后D2也有 就不显示,D2里有的数据 D1没有 也不显示,就只显示D1里有 D2里没有的数据)

这个是个通过单据记录手机号的表 手机号存在重复 需要去重


求大神指点下思路 这个sql该怎么写?
...全文
73 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
昵称被占用了 2017-02-27
  • 打赏
  • 举报
回复
SELECT distinct phone FROM tablename as D1 WHERE Time between '2017-1-1' and '2017-2-1' and NOT EXISTS(SELECT * FROM tablename D2 WHERE D2.phone = D1.phone and Time between '2017-2-1' and '2017-2-28' )
二月十六 版主 2017-02-27
  • 打赏
  • 举报
回复
引用 3 楼 qq_37682182 的回复:
[quote=引用 2 楼 sinat_28984567 的回复:]
SELECT * FROM D1 WHERE NOT EXISTS(SELECT * FROM D2 WHERE D2.phone = D1.phone)
这个D1和D2都是我从同一张表筛选出来的 我想用一个sql就执行出来结果 该怎么写呢[/quote]
;WITH D1(phone)AS(
select phone FROM 表 WHERE 时间 BETWEEN XXX AND XXX
),D2(phone)AS(
select phone FROM 表 WHERE 时间 BETWEEN XXX AND XXX
)
SELECT D1.* FROM D1 WHERE NOT EXISTS(SELECT * FROM D2 WHERE D2.phone = D1.phone)
qq_37682182 2017-02-27
  • 打赏
  • 举报
回复
引用 2 楼 sinat_28984567 的回复:
SELECT * FROM D1 WHERE NOT EXISTS(SELECT * FROM D2 WHERE D2.phone = D1.phone)
这个D1和D2都是我从同一张表筛选出来的 我想用一个sql就执行出来结果 该怎么写呢
二月十六 版主 2017-02-27
  • 打赏
  • 举报
回复
SELECT * FROM D1 WHERE NOT EXISTS(SELECT * FROM D2 WHERE D2.phone = D1.phone)
二月十六 版主 2017-02-27
  • 打赏
  • 举报
回复
SELECT * FROM D1 WHERE NOT EXISTS(SELECT * FROM D2 WHERE D2,phone = D1.phone)

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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