SQL2000下,假设有这么两张表
表1存储用户的基本信息
"userid" (主键)
"用户姓名"
.
.
.
表2:存储所用用户的购买信息
"userid"
"时间"
我现在是想查询30天未购买东西的用户,下面这段是我昨天问到的答案,当时我觉得正确的! 最后发现这段代码内层查询到的userid是所有购买时间记录大于30天的userid.估计是我昨天表述不清楚!SELECT *
FROM USERINFO
WHERE userid IN
(SELECT userid
FROM BuyInformation
WHERE DATEDIFF(day, 时间, GETDATE()) > 30
)
表1存储用户的基本信息
"userid" (主键)
"用户姓名"
.
.
.
表2:存储所用用户的购买信息
"userid"
"时间"
我现在是想查询30天未购买东西的用户,下面这段是我昨天问到的答案,当时我觉得正确的! 最后发现这段代码内层查询到的userid是所有购买时间记录大于30天的userid.估计是我昨天表述不清楚!SELECT *
FROM USERINFO
WHERE userid IN
(SELECT userid
FROM BuyInformation
WHERE DATEDIFF(day, 时间, GETDATE()) > 30
)
where not exists(select 1 from BuyInformation
where userid=a.userid and DATEDIFF(day, 时间, GETDATE()) > 30)
试了下,这个貌似不能得到我想要的结果!
比如我有如下几条记录,我用上面这张方法查询20天未购买东西的用户,查询出来的结果是20天内购买过东西的用户,如果我把NOT EXISTS换成EXISTS,又会多余查询出0003号用户.
0001 2012-10-15
0002 2012-10-1
0003 2012-9-1
0004 2012-9-15
0005 2012-10-10
0003 2012-10-1
思路应该是这样,我也试过用如下方法查出单个用户最近一次消费记录,然后进行比对,但这种方法只能判断一个用户的信息! SELECT top 1 时间
FROM BuyInformation
where 用户编号 = '000100010001'
ORDER BY 时间 DESC
where userid=a.userid and DATEDIFF(day, 时间, GETDATE()) > 30)
--查小于30天所有购买者的ID
;with abc as (
select userid from BuyInformation where DATEDIFF(day, 时间, GETDATE()) < 30
)
--查所有不包含上述ID的用户信息
select * from userinfo where userid not in (select * from abc)
;with abc as (
select userid from BuyInformation where DATEDIFF(day, 时间, GETDATE()) < 30
)
--查所有不包含上述ID的用户信息
select * from userinfo where userid not in (select * from abc)
这样写到是清晰明了,为什么提示 "在关键字 'with' 附近有语法错误。"