请教一个查询问题,求效率最高的解决方案

s2160487 2013-09-05 09:40:32
Table A --所有用户表

UserID SupID RegisterDate
————————————————————————
Table B --上级代理表

UserID
————————————————————————

其中Table A.SupID 对应 Table B.UserID,表示Table A的用户是B的下级

需求:查询出3个月没有发展新下级的上级的所有下级用户(- -|||有点绕)

先谢谢了,在线等
...全文
200 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
s2160487 2013-09-05
  • 打赏
  • 举报
回复
引用 19 楼 s2160487 的回复:
搞定了,谢谢大家提供的思路 select UserID from TableB where UserID not in( select SupID from TableA where SupID in (select UserID from TableB) group by SupID having max(RegisterDate) > DATEADD(MONTH,-3,GETDATE()))
外面还要套一层select UserID from Table A where SupID in()
s2160487 2013-09-05
  • 打赏
  • 举报
回复
引用 20 楼 SQL_Beginner 的回复:
搞传销???
传销模式吧,现在网站发展客户不都是这玩意吗……
  • 打赏
  • 举报
回复
搞传销???
s2160487 2013-09-05
  • 打赏
  • 举报
回复
搞定了,谢谢大家提供的思路 select UserID from TableB where UserID not in( select SupID from TableA where SupID in (select UserID from TableB) group by SupID having max(RegisterDate) > DATEADD(MONTH,-3,GETDATE()))
华夏小卒 2013-09-05
  • 打赏
  • 举报
回复
结果
UserF	UserC	2013/5/5 0:00:00.000
华夏小卒 2013-09-05
  • 打赏
  • 举报
回复
借用楼上数据

create table A (
    UserID nvarchar(10),
    SupID nvarchar(10),
    RegisterDate datetime
) 
insert into A values ('UserB','UserA','2013-08-05') 
insert into A values ('UserC','UserB','2013-07-05') 
insert into A values ('UserD','UserB','2013-08-05') 
insert into A values ('UserE','UserA','2013-08-05') 
insert into A values ('UserF','UserC','2013-05-05') 

create table B (UserID nvarchar(10)) 
insert into B values ('UserA') 
insert into B values ('UserB') 
insert into B values ('UserC')  


SELECT * FROM A where SupID not in(
    select SupID from A t,B t1 
    where SupID=t.SupID and t.SupID=t1.UserID 
    and datediff(month,RegisterDate,getdate())<3
    )
s2160487 2013-09-05
  • 打赏
  • 举报
回复
回mylife21 这样还是不对啊。。。。
mylife21 2013-09-05
  • 打赏
  • 举报
回复
引用 13 楼 s2160487 的回复:
查出来的数据好像不对,最终要查的是表A的数据,条件是表B的用户里3个月没发展新下级,然后把这部分用户的下级查出来
LZ太懒了,直接修改下就可以了。 chwnrthd回复: 把b.UserID改为a.UserID
s2160487 2013-09-05
  • 打赏
  • 举报
回复
引用 12 楼 js_szy 的回复:
呵呵,还有人删回复的啊。 只是觉得他表述不是很清楚,所以就鸡肋了一句,居然还被删了。哈哈哈。好无聊哦
看来还有版主管啊- - 我可没时间应该也没权限删这个东西
s2160487 2013-09-05
  • 打赏
  • 举报
回复
查出来的数据好像不对,最终要查的是表A的数据,条件是表B的用户里3个月没发展新下级,然后把这部分用户的下级查出来
华夏小卒 2013-09-05
  • 打赏
  • 举报
回复
呵呵,还有人删回复的啊。 只是觉得他表述不是很清楚,所以就鸡肋了一句,居然还被删了。哈哈哈。好无聊哦
Andy__Huang 2013-09-05
  • 打赏
  • 举报
回复
借用chwnrthd 的数据,但有点修改
create table A (UserID nvarchar(10),SupID nvarchar(10),RegisterDate datetime)
insert into A values ('UserB','UserA','2013-08-05')
insert into A values ('UserC','UserB','2013-07-05')
insert into A values ('UserD','UserB','2013-08-05')
insert into A values ('UserE','UserA','2013-08-05')
create table B (UserID nvarchar(10))
insert into B values ('UserA')
insert into B values ('UserB')
insert into B values ('UserC')

select b.*
from b
where  not exists(select 1 from a 
	where b.UserID=a.SupID
		and A.RegisterDate between DATEADD(month,-3,getdate()) and GETDATE())
--结果
/*
UserID
------------------------
UserC
*/
Andy__Huang 2013-09-05
  • 打赏
  • 举报
回复
引用 6 楼 s2160487 的回复:
hdhai9451 你好,RegisterDate是Table A的字段

select b.*
from TableB b
where  not exists(select 1 from TableA a 
	where b.SupID=a.UserID 
		and A.RegisterDate between DATEADD(month,-3,getdate()) and GETDATE())
改一下,你试试
  • 打赏
  • 举报
回复

create table A (UserID nvarchar(10),SupID nvarchar(10),RegisterDate datetime)
insert into A values ('UserB','UserA','2013-05-05')
insert into A values ('UserC','UserB','2013-07-05')
insert into A values ('UserD','UserC','2013-08-05')
insert into A values ('UserE','UserD','2013-06-05')
create table B (UserID nvarchar(10))
insert into B values ('UserA')
insert into B values ('UserB')
insert into B values ('UserC')
insert into B values ('UserD')
select b.UserID 
from A a
INNER JOIN B b
	ON a.SupID=b.UserID
where a.SupID not in(
select SupID
from A
where RegisterDate>DATEADD(mm,-3,GETDATE()))

/*
UserA
UserD
*/
wgsasd311 2013-09-05
  • 打赏
  • 举报
回复
select b.* from TableB b where not exists(select 1 from TableA a where b.SupID=a.UserID and RegisterDate between DATEADD(month,-3,getdate()) and GETDATE())
s2160487 2013-09-05
  • 打赏
  • 举报
回复
引用 2 楼 chen870201 的回复:
……………… 下级的上级的下级 为什么要绕这么一下?
是上级的下级 不是下级的上级的下级
s2160487 2013-09-05
  • 打赏
  • 举报
回复
hdhai9451 你好,RegisterDate是Table A的字段
  • 打赏
  • 举报
回复
跟B表有关系吗?
Andy__Huang 2013-09-05
  • 打赏
  • 举报
回复
select b.*
from TableB b
where RegisterDate between DATEADD(month,-3,getdate()) and GETDATE()
	and not exists(select 1 from TableA a where b.SupID=a.UserID)
chen870201 2013-09-05
  • 打赏
  • 举报
回复
……………… 下级的上级的下级 为什么要绕这么一下?
加载更多回复(1)

22,209

社区成员

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

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