雪花如何获取累计日期值

时间:2021-01-22 14:05:13

标签: date snowflake-cloud-data-platform

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

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

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

2 个答案:

答案 0 :(得分:0)

您能否检查以下查询: struct my_struct { uint8_t array[7]; } struct my_struct var = {0}; var.array[0] = 0; var.array[1] = 1; var.array[2] = 2; var.array[3] = 3; var.array[4] = 4; var.array[5] = 5; var.array[6] = 6;

答案 1 :(得分:0)

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

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 ;