根据标准确定重复项的优先级
Prioritizing Duplicates Based on Criteria
我的 table 数据包含重复的电子邮件地址。每个电子邮件地址都有日期、颜色(值:"Black"、"Blue" 或 "Green")和唯一 ID。可能有一组重复的电子邮件地址包含两个以上的电子邮件地址(即我可能有 10 个重复的相同电子邮件地址)并且每组重复的电子邮件地址可能包含与其各自副本中的颜色相同或不同的颜色放。
我的 objective 是检索具有特定颜色和最大(日期)的电子邮件地址的 ID。我想优先考虑颜色(首先是 "Black",然后是 "Blue",然后是 "Green"),然后仅当同一重复集中有两个或更多电子邮件地址时才移动到最大(日期)具有相同的最高期望颜色。
示例 1
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
示例 2
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"--我选择了 max(date) .
在示例 2 中,我想选择 ID 8,因为这是一组重复电子邮件地址的最理想颜色--"Blue"。
您可以使用 ROW_NUMBER()
根据您的要求为每组重复电子邮件中的每条记录分配优先级编号。然后,在外部查询中,您可以 select 每个组中具有最高优先级的记录:
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
我的 table 数据包含重复的电子邮件地址。每个电子邮件地址都有日期、颜色(值:"Black"、"Blue" 或 "Green")和唯一 ID。可能有一组重复的电子邮件地址包含两个以上的电子邮件地址(即我可能有 10 个重复的相同电子邮件地址)并且每组重复的电子邮件地址可能包含与其各自副本中的颜色相同或不同的颜色放。
我的 objective 是检索具有特定颜色和最大(日期)的电子邮件地址的 ID。我想优先考虑颜色(首先是 "Black",然后是 "Blue",然后是 "Green"),然后仅当同一重复集中有两个或更多电子邮件地址时才移动到最大(日期)具有相同的最高期望颜色。
示例 1
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
示例 2
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"--我选择了 max(date) .
在示例 2 中,我想选择 ID 8,因为这是一组重复电子邮件地址的最理想颜色--"Blue"。
您可以使用 ROW_NUMBER()
根据您的要求为每组重复电子邮件中的每条记录分配优先级编号。然后,在外部查询中,您可以 select 每个组中具有最高优先级的记录:
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