Teradata CASE 和 HAVING COUNT
Teradata CASE and HAVING COUNT
我有一个tableHandset
。有一些重复的 imei,我必须 select 每个 imei 都有这些要求:
- 找到唯一的 imei 后选择那个
- 当发现重复的 imei 时,如果有一个 data_capable = 'Y',请选择那个。
- 当发现重复的 imei 时,如果两个 data_capable = 'Y',选择一个最大(收入)
- 当找到重复的 imei 时,如果两个 data_capable = 'N' 然后选择一个
最大(收入)
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
的选项是 Y
和 N
:
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
我有一个tableHandset
。有一些重复的 imei,我必须 select 每个 imei 都有这些要求:
- 找到唯一的 imei 后选择那个
- 当发现重复的 imei 时,如果有一个 data_capable = 'Y',请选择那个。
- 当发现重复的 imei 时,如果两个 data_capable = 'Y',选择一个最大(收入)
- 当找到重复的 imei 时,如果两个 data_capable = 'N' 然后选择一个 最大(收入)
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
的选项是 Y
和 N
:
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