我有一个包含重复电子邮件地址的数据表。每个电子邮件地址都有一个日期,颜色(值:"黑","蓝"或"绿")和唯一ID。可能有一组重复的电子邮件地址包含两个以上的电子邮件地址(即我可能有10个相同电子邮件地址的重复),并且每组重复的电子邮件地址可能包含与其各自副本中相同或不同的颜色组。
我的目标是检索具有特定颜色和最大(日期)的电子邮件地址的ID。我想优先考虑颜色(首先"黑"然后"蓝"然后"绿")然后只有当有两个时才移动到最大(日期)或相同副本集中具有相同最高所需颜色的更多电子邮件地址。
ID Email Color Date
1 xyz@xyz.com Black 01/01/2014
2 xyz@xyz.com Black 01/31/2014
3 xyz@xyz.com Blue 03/31/2015
4 xyz@xyz.com Green 01/01/2014
5 xyz@xyz.com Green 01/01/2014
ID Email Color Date
6 abc@abc.com Green 12/31/2014
7 abc@abc.com Green 01/01/2014
8 abc@abc.com Blue 01/31/2014
在示例1中,我想选择ID 2,因为这是重复电子邮件地址集中所需的最高颜色 - " Black" - 我选择的是具有最大值的日期(日期) )。
在示例2中,我想选择ID 8,因为这是重复电子邮件地址集中所需的最高颜色 - " Blue"。
答案 0 :(得分:1)
您可以使用ROW_NUMBER()
根据您的要求为每组重复的电子邮件中的每条记录分配优先级编号。然后,在外部查询中,您可以从具有最高优先级的每个组中选择记录:
SELECT ID, Email, Color
FROM (
SELECT ID, Email, Color,
ROW_NUMBER() OVER (PARTITION BY email
ORDER BY (CASE Color
WHEN 'Black' THEN 1
WHEN 'Blue' THEN 2
ELSE 3
END),
Date DESC) AS rn
FROM emails ) e
WHERE e.rn = 1