我有一张桌子,每个月都会列出一家公司的客户。如果添加了4个新客户且没有人离开,那么表中将增加4行,而不是前一个月添加的行。我想我可以通过以下代码识别这4个新客户,但它返回0行。
SELECT Variable1
FROM Table1
WHERE DateVariable = 201311
AND Variable1 NOT IN (SELECT Variable1
FROM Table1
WHERE DateVariable < 201311)
我的查询有什么问题?
答案 0 :(得分:0)
您的DateVariable的类型是什么?它是一个默认值为= GetDate()的日期吗?
您应该尝试使用DateVariable&gt; ='201311
你没有,没有意义,因为你要求=,你不需要一个不在&lt;,它已经完成了。
你可以在你的桌子上展示一些线条,比如一个你不想展示的线条和一个你想要的线条
答案 1 :(得分:0)
我不确定我是否理解正确,因为缺少信息。
但是,这就是您输出本月新用户的方式:
SELECT Variable1
FROM Table1
WHERE DateVariable >= '20131201'
如果您需要检查上个月的客户,您的查询将如下所示:
SELECT Variable1
FROM Table1
WHERE DateVariable < '20131201' AND DateVariable >= '20131101'
答案 2 :(得分:0)
这不是试图回答你的问题。这是演示如何使查询运行更快的演示。
虽然直观且与数据库无关,但这个结构
where somefield not in (subquery goes here)
很慢。这是与查询具有相同逻辑的东西,但会运行得更快。
SELECT Variable1
FROM Table1
WHERE DateVariable = 201311
except
SELECT Variable1
FROM Table1
WHERE DateVariable <201311
在某些数据库中,例如Oracle,关键字是“减”而不是除外。可能有一些数据库完全不支持这种结构。但是,您正在使用sql server,它可以。