SQL - 选择以获取具有条件的不同集

时间:2017-03-09 15:05:59

标签: sql sql-server select sql-server-2012 subquery

我有一张数据表

Table1
KEY     END_DATE        
1       1974-01-01            
1       NULL            
1       2020-01-01            
2       NULL                
2       NULL            
2       NULL            
3       1997-10-01            
3       1974-01-01           
3       1976-01-01                
3       1978-01-01             
4       NULL            
4       1997-10-01            
4       2008-04-01            

在上表中我有4个条件
对于密钥1 - MAX(END_DATE)> GETDATE()(Todat日期)并且在这种情况下也有NULL我应该得到集合的最大日期
对于密钥2 - 只有NULL,所以我们应该得到null 对于密钥3 - 没有NULLS和MAX(END_DATE)< GETDATE()所以我们应该得到MAX(END_DATE)
对于密钥4 - 具有NULL和MAX(END_DATE)< GETDATE()所以我们应该得到NULL

HERE是结果表

Result Table
KEY     END_DATE                  
1       2020-01-01            
2       NULL            
3       1997-10-01             
4       NULL            

我应该在选择

中获得所有唯一键END_DATE以及上述4个条件

谢谢

1 个答案:

答案 0 :(得分:3)

如果我理解正确,您的条件是:

  • 如果没有NULL值或
  • ,则为最长结束日期
  • 最大结束日期是将来的

这只是某些条件的汇总:

select key,
       (case when count(*) = count(end_date) then max(end_date)
             when max(end_date) > getdate() then max(end_date)
        end) as end_date
from t
group by key;