sql - 选择Statement哪里不存在每个id的条件?

时间:2013-11-21 11:39:06

标签: sql sql-server

我在我的数据库中有这个表,我有一个历史记录:

Tabelname:Activity

ActivityID | DateBegin  | DateEnd 
1            2013-01-01   2013-01-15
1            2013-01-15   9999-12-31
2            2013-01-20   2013-03-15

现在我想编写一个Query,它将返回带有DateEnd =的id 9999-12-31。在这个例子中,我想要仅返回id 2

我编写了这个查询,但它不起作用:(我得到NULL的return语句)

SELECT ActivityID 
  FROM [dbo].[Activity]
  where NOT EXISTS  (SELECT ActivityID from
                  Activity where DateEnd ='9999-12-31') 

有人能帮助我吗?

非常感谢

3 个答案:

答案 0 :(得分:2)

如果要返回所有没有任何日期为9999-12-31的行的ID,您应首先检查您不想返回哪些ID,然后在查询中避免使用它们。

所以查询变为:

SELECT ActivityID 
    FROM [dbo].[Activity]
    WHERE ActivityID NOT IN (SELECT ActivityID from
              [dbo].[Activity] WHERE DateEnd ='9999-12-31') 

答案 1 :(得分:1)

SELECT ActivityID 
FROM   dbo.Activity As x
WHERE  NOT EXISTS (
         SELECT ActivityID
         FROM   dbo.Activity
         WHERE  DateEnd ='9999-12-31'
         AND    ActivityID = x.ActivityID
       )

答案 2 :(得分:0)

请尝试

 SELECT ActivityId  from Activity  where  DateEnd != CONVERT(varchar(10), '9999-12-31',101)