有人可以帮助我获得以下逻辑的结果吗?我有一个包含以下列的表格。
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
如果有人帮助我以任何可能的方式在雪花中获得所需的结果集,那就太好了。
答案 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 ;