1
我有两个表。一个是Reference
表,用于排序优先级,一个是Customer
表。 Reference
表用于优先考虑表Customer
中的每个列,以便为单个客户的单个列给出不同的顺序。在'PARTITION BY'上使用过滤条件
参考表:
---------------------------------------
| Priority | Attribute | sourceID |
---------------------------------------
| 1 | EMAIL | 1 |
| 2 | EMAIL | 2 |
| 3 | EMAIL | 3 |
| 2 | NAME | 1 |
| 1 | NAME | 2 |
| 3 | NAME | 3 |
---------------------------------------
客户表:
-----------------------------------------------------------------------
| CustomerID | Name | Email | SourceID | Date |
-----------------------------------------------------------------------
| 1 | John | NULL | 1 | 03/01/2017 |
| 1 | NULL | [email protected] | 3 | 01/01/2017 |
| 1 | J | [email protected] | 2 | 02/01/2017 |
-----------------------------------------------------------------------
结果:
---------------------------------------------
| CustomerID | Name | Email |
---------------------------------------------
| 1 | John | [email protected] |
---------------------------------------------
在t他目前我使用下面的查询做到这一点:
SELECT DISTINCT
FIRST_VALUE(c.Name IGNORE NULLS)
OVER (PARTITION BY p.customerID
ORDER BY r.PRIORITY, c.DATE
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS EMAIL,
FIRST_VALUE(c.Email IGNORE NULLS)
OVER (PARTITION BY c.customerID
ORDER BY r.PRIORITY, c.DATE
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS EMAIL
FROM Customer c
JOIN reference r ON c.sourceID = r.sourceID;
然而,这确实需要为每列不同的属性纳入考虑。我需要按部分为每个分区添加某种过滤器。
任何人都可以协助我如何去做到这一点?