我想创建一个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值,则将使用最高优先级值填充该列。如果有两个具有相同优先级的值,则将选择具有最新日期的值。必须在列级别选择此选项以获取每个字段的最新值。
任何帮助或正确方向上的一点都会很棒。
由于
答案 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;