【发布时间】:2017-07-21 09:56:55
【问题描述】:
我有两张桌子。一个是Reference 表,用于排序优先级,一个是Customer 表。 Reference 表用于为Customer 表中的每一列赋予优先级,从而为单个客户的各个列提供不同的顺序。
参考表:
---------------------------------------
| 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 | John@email.com | 3 | 01/01/2017 |
| 1 | J | J.Smith@email.com | 2 | 02/01/2017 |
-----------------------------------------------------------------------
结果:
---------------------------------------------
| CustomerID | Name | Email |
---------------------------------------------
| 1 | John | J.Smith@email.com |
---------------------------------------------
目前我正在使用以下查询来执行此操作:
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;
但是,这确实考虑了每列的不同属性。我需要按部分向每个分区添加某种过滤器。
谁能帮我解决这个问题?
【问题讨论】:
标签: sql netezza window-functions