2017-08-30 114 views
0

对不起,措辞不当的问题,但我使用下面的查询巩固客户记录:根据同一选择查询中的另一个值选择合并值?

select 
customer_key 
,FIRST_VALUE(name   IGNORE NULLS) OVER(PARTITION BY customer_key ORDER BY last_updated_date desc ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS NAME 
,FIRST_VALUE(county  IGNORE NULLS) OVER(PARTITION BY customer_key ORDER BY last_updated_date desc ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS COUNTRY 
,FIRST_VALUE(country_code IGNORE NULLS) OVER(PARTITION BY customer_key ORDER BY last_updated_date desc ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS COUNTRY_CODE 
from   customers cust 

这将选择最近使用的customer_key客户记录。但对于国家/地区,我需要国家/地区代码与国家/地区处于同一行,并使用country字段作为驱动程序,但country_code列是NOT NULL字段。

例如,该原始数据:

customer Country Country_Code Date 
Dave  NULL  0   30/08/2017 
David  UK  1   29/08/2017 

需要显示为:

customer Country Country_Code 
Dave  UK  1 
Dave  UK  1 

但使用select查询我目前使用我得到这个:

customer Country Country_Code 
Dave  UK  0 
Dave  UK  0 

有什么建议吗?

回答

1

以下查询应该可以工作。

SELECT FIRST_VALUE(NAME IGNORE NULLS) OVER (
     PARTITION BY customer_key ORDER BY last_updated_date DESC ROWS BETWEEN UNBOUNDED PRECEDING 
       AND UNBOUNDED FOLLOWING 
     ) AS NAME 
    ,FIRST_VALUE(county IGNORE NULLS) OVER (
     PARTITION BY customer_key ORDER BY last_updated_date DESC ROWS BETWEEN UNBOUNDED PRECEDING 
       AND UNBOUNDED FOLLOWING 
     ) AS COUNTRY 
    ,FIRST_VALUE((
      CASE 
       WHEN county IS NULL 
        THEN NULL 
       ELSE country_code 
       END 
      ) IGNORE NULLS) OVER (
     PARTITION BY customer_key ORDER BY last_updated_date DESC ROWS BETWEEN UNBOUNDED PRECEDING 
       AND UNBOUNDED FOLLOWING 
     ) AS COUNTRY_CODE 
FROM customers cust; 
相关问题