根据标准确定重复项的优先级

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

SQL Fiddle Demo