select根据同一个 select 查询中的另一个值合并一个值?
selecting a consolidated value based on another value in the same select query?
抱歉问题措辞不佳,但我正在使用以下查询合并客户记录:
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
这 select 是使用 customer_key 的客户的最新记录。但对于国家,我需要国家代码与国家在同一行,使用国家字段作为驱动程序,但 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
有什么建议吗?
以下查询应该有效。
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;
抱歉问题措辞不佳,但我正在使用以下查询合并客户记录:
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
这 select 是使用 customer_key 的客户的最新记录。但对于国家,我需要国家代码与国家在同一行,使用国家字段作为驱动程序,但 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
有什么建议吗?
以下查询应该有效。
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;