【问题标题】:Snowflake how to obtain cumulative date values雪花如何获取累积日期值
【发布时间】:2021-04-27 00:13:35
【问题描述】:

有人可以帮助我获得以下逻辑的结果。我有一个包含以下列的表格。

TYPE    SRC_CURR    TAR_CURR    EX_RATE     EX_RATE_START_DATE  
M       GBP         USD         1.36687     2/1/2021            
M       GBP         USD         1.33636     1/1/2021            
M       GBP         USD         1.32837     12/1/2020           
M       GBP         USD         1.30242     11/1/2020           
M       GBP         USD         1.27421     10/1/2020           
M       GBP         USD         1.31527     9/1/2020            
ZEU     GBP         USD         1.3654      1/20/2021           
ZEU     GBP         USD         1.363       1/19/2021           
ZEU     GBP         USD         1.3587      1/18/2021           
ZEU     GBP         USD         1.359       1/15/2021           
ZEU     GBP         USD         1.3689      1/14/2021           
ZEU     GBP         USD         1.3639      1/13/2021           
ZEU     GBP         USD         1.3664      1/12/2021           
ZEU     GBP         USD         1.3518      1/11/2021           
ZEU     GBP         USD         1.3568      1/8/2021            

所以我需要从上面的值形成一个新列,即 EX_RATE_END_DATE,如下所示。理想情况下,要求 EX_RATE_END_DATE 的最晚开始日期默认为 9999-12-31,其余记录应为之前的最大开始日期 - 1。

请在下面找到所需的输出,

TYPE    SRC_CURR    TAR_CURR    EX_RATE     EX_RATE_START_DATE  EX_RATE_END_DATE
M       GBP         USD         1.36687     2/1/2021            12/31/9999
M       GBP         USD         1.33636     1/1/2021            1/31/2021
M       GBP         USD         1.32837     12/1/2020           12/31/2020
M       GBP         USD         1.30242     11/1/2020           11/30/2020
M       GBP         USD         1.27421     10/1/2020           10/31/2020
M       GBP         USD         1.31527     9/1/2020            9/30/2020
ZEU     GBP         USD         1.3654      1/20/2021           12/31/9999
ZEU     GBP         USD         1.363       1/19/2021           1/19/2021
ZEU     GBP         USD         1.3587      1/18/2021           1/18/2021
ZEU     GBP         USD         1.359       1/15/2021           1/17/2021
ZEU     GBP         USD         1.3689      1/14/2021           1/14/2021
ZEU     GBP         USD         1.3639      1/13/2021           1/13/2021
ZEU     GBP         USD         1.3664      1/12/2021           1/12/2021
ZEU     GBP         USD         1.3518      1/11/2021           1/11/2021
ZEU     GBP         USD         1.3568      1/8/2021            1/10/2021

如果有人帮助我以任何可能的方式在雪花中获得所需的结果集,那就太好了。

【问题讨论】:

    标签: date snowflake-cloud-data-platform


    【解决方案1】:

    我找到了以下逻辑来获得所需的结果。请评论是否可以通过更好/其他方式实现。

    select 
        TYPE,
        SRC_CURR,
        TAR_CURR,
        EX_RATE,
        EX_RATE_START_DATE ,
        lag(EX_RATE_START_DATE) over ( PARTITION BY   TYPE,SRC_CURR,TAR_CURR order  by  EX_RATE_START_DATE  desc)  as END_TEMP,
        case when END_TEMP is NULL then '9999-12-31' else END_TEMP end as EX_RATE_END_DATE
    from schema.target_table
    order by TYPE,SRC_CURR,EX_RATE_START_DATE desc ;
    

    【讨论】:

      【解决方案2】:

      您能否检查以下查询: select TYPE, SRC_CURR, TAR_CURR, EX_RATE, EX_RATE_START_DATE, CASE WHEN DATE_VALUE = 1 THEN '9999-12-31' ELSE LAST_DAY("EX_RATE_START_DATE", 'MONTH') END AS "LAST DAY OF YEAR" from ( SELECT TYPE, SRC_CURR, TAR_CURR, EX_RATE, EX_RATE_START_DATE, row_number() over(partition by type order by EX_RATE_START_DATE desc) as date_value FROM SOF_TEST1) a;

      【讨论】:

      • 谢谢@Sriga ..我找到了其他方法来获得所需的结果..请检查我的答案是否相同..
      猜你喜欢
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多