SQL - 仅在没有行保存值时返回

时间:2016-10-05 17:20:48

标签: mysql sql sql-server oracle date

我正在寻找一种只有当 NO 行保持特定值时才能返回 ID 的方法

例如:

*ID* | *Date*    
1    | 01/01/2001      
1    | 02/02/2002    
1    | 03/03/2003

如果我希望SQL仅在没有日期等于02/02/2002的情况下返回 ID ,我该如何编写脚本?我尝试过以下的尝试并失败了:

select *ID* 
from (example)
where date != 02/02/2002

问题是这仍然会返回 ID - 1,因为第一行和最后一行不等于02/02/2002。我的目标是没有返回结果,因为至少有一行保持匹配日期。

当任何行中有匹配的日期时,我需要脚本完全跳过 ID

为清楚起见,当使用相同的'选择'时,下面应该返回 ID 。如上所述,因为没有日期匹配:

*ID*    |   *Date*
2       |   03/03/2003      
2       |   04/04/2004    
2       |   05/05/2005

1 个答案:

答案 0 :(得分:3)

您需要Group ByHaving子句

select ID 
From yourtable 
group by ID 
Having count (case when date != '02/02/2002' then 1 end) = count(*)

正如mathguy所说,这也有效

select ID 
From yourtable 
group by ID 
Having count(case when date = '02/02/2002' then 1 end) = 0