我有一个表Handset。有一些重复的imei,我必须按照这些要求选择一个imei:

当找到唯一的imei时,就选择

  • ,然后选择一个
  • 找到重复的imei时,使用
  • ,如果一个data_capable ='Y',则选择那个。
  • 发现重复的imei时
  • ,如果两个data_capable ='Y',请选择一个带有max(revenue)的
  • 如果发现重复的imei,则为
  • ,如果两个data_capable ='N',则选择
    max(revenue)

  • 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组合在一起。
    师父的任何帮助都非常感谢

    最佳答案

    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
    

    关于sql - Teradata的案例和拥有的数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30906719/

    10-11 03:09