SQL Server - 识别新条目

时间:2013-12-13 13:05:13

标签: sql sql-server

我有一张桌子,每个月都会列出一家公司的客户。如果添加了4个新客户且没有人离开,那么表中将增加4行,而不是前一个月添加的行。我想我可以通过以下代码识别这4个新客户,但它返回0行。

SELECT Variable1
FROM   Table1
WHERE  DateVariable = 201311
       AND Variable1 NOT IN (SELECT Variable1
                             FROM   Table1
                             WHERE  DateVariable < 201311) 

我的查询有什么问题?

3 个答案:

答案 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,它可以。