根据标准和比较比较列值。计数异常值

时间:2017-01-18 07:21:46

标签: sql

我有一张桌子(如下所示),有两列日期。我试图在两个列中匹配年份。如果一列中的年份为n,则代码会将其他列中相应的年份值预期为n(n - 1)(n - 2)。例如,如果左列值2016,其右列对应应为2014年,2015年或2016年,否则应将其作为异常值计算。

  Date 1   |  Date 2
-----------+----------
31-10-2016 |31-10-2014    
31-10-2016 |31-10-2015  
31-10-2016 |31-10-2016  
31-10-2016 |31-10-2016  
31-10-2016 |31-10-2015  
31-10-2016 |31-10-2013  
31-10-2016 |31-10-2013

1 个答案:

答案 0 :(得分:0)

以下查询将执行:

select (case when extract(year from date2) between extract(year from date1 )-2 and extract(year from date1) then 'valid' else 'outlier' end)tagDt
from your_table

您只需从两个日期中提取年份并应用正常的案例操作。

<强>示例:

select date '2016-10-31' date1, '2014-10-31' date2, extract(year from date '2016-10-31') y1, extract(year from date '2014-10-31') y2,
       (case when extract(year from date '2013-10-31') between extract(year from date '2016-10-31')-2 and extract(year from date '2016-10-31') then 'valid' else 'outlier' end)tagDt

<强>输出:

"2016-10-31";"2014-10-31";2016;2014;"outlier"