根据优先级参考表选择列值?

时间:2017-07-19 12:16:00

标签: sql database netezza

我想创建一个select查询,它将根据引用表中设置的优先级为每列选择值。如果列的值不止一个,它将使用日期字段选择最近的值。

示例:

客户表:

CustomerID   customerName   CustomerEmail    monthDate    SourceID
1            Michael        NULL             1/1/2017     4
2            Sarah          Sarah@email.com  2/1/2017     2
3            Dave           Dave@no.com      3/1/2017     1
4            Sal            Sal@mail.com     4/1/2017     4
4            Sally          Sall@emai.com    5/1/2017     4
1            Mike S         Mike.s@em.com    5/1/2017     3

参考表:

SourceID   Priority
1          2
2          3
3          4
4          1

4我的选择查询将显示:

CustomerID   customerName   CustomerEmail
1            Michael        Mike.s@em.com
2            Sarah          Sarah@email.com
3            Dave           Dave@no.com
4            Sally          Sall@emai.com

因此,如果列具有NULL值,则将使用最高优先级值填充该列。如果有两个具有相同优先级的值,则将选择具有最新日期的值。必须在列级别选择此选项以获取每个字段的最新值。

任何帮助或正确方向上的一点都会很棒。

由于

1 个答案:

答案 0 :(得分:1)

使用join将表格放在一起并获得优先级。然后,您可以使用row_number()为每个客户选择“第一个”:

select c.*
from (select c.*,
             row_number() over (partition by c.customerid
                                order by r.priority desc, monthdate desc
                               ) as seqnum
      from customer c join
           reference r
           on c.sourceid = r.sourceid
     ) c
where seqnum = 1;