Teradata CASE和HAVING COUNT

时间:2015-06-18 04:55:25

标签: sql teradata

我有一张桌子Handset。有一些重复的imei,我必须只选择一个符合这些要求的imei:

  1. 当发现独特的imei然后选择那个
  2. 当找到重复的imei时,如果有一个data_capable =' Y',则选择那个。
  3. 当找到重复的imei时,如果data_capable =' Y',则选择一个max(收入)
  4. 当找到重复的imei时,如果data_capable =' N'然后选择一个 MAX(收入)
  5. IMEI               MSISDN        REVENUE   DATA_CAPABLE
    
    35622200000001  4282336700001   1000        Y
    35622200000001  4282336700002   2000        N
    35622200000002  4282336700003   3000        Y
    35622200000003  4282336700004   4000        Y
    35622200000004  4282336700005   5000        Y
    35622200000005  4282336700006   6000        Y
    35622200000005  4282336700007   7000        Y
    35622200000006  4282336700008   8000        Y
    35622200000007  4282336700009   9000        N
    35622200000007  4282336700010   1100        N
    

    我很困惑在这种情况下合并CASE WHEN and HAVING COUNT(*)>1。 任何来自大师的帮助都非常感激

1 个答案:

答案 0 :(得分:1)

这是ROW_NUMBER的情况。

假设data_capable的选项为YN

select *
from tab
qualify
   row_number()
   over (partition by imei          -- for each imei
         order by data_capable desc -- 'Y' first
                  ,revenue desc     -- max(revenue) first
        ) = 1