如何将下面语句改为元编程sql()的方式?

st = take(`a, 7) join take(`b, 6)
date = 2023.08.01 + 0 1 3 6 7 8 9 0 1 2 3 8 9
val = 35 34 35.79 33.26 32.88 33.73 31 25 24 22 25.79 21 31
t = table(st, date, val)
marketDay = 2023.08.01 + 0 1 2 3 6 7 8 9
re = select last(val) from t group by st, interval(date, 1d, 0) as date 

如何将上面这个语句中的最后一句( select last(val) from t group by st, interval(date, 1d, 0) as date )改为元编程sql()的方式,主要是不知道group by st, interval(date, 1d, 0) as date 这部分怎么改(group by中的第二个条件interval不是一个一元函数),谢谢。

请先 登录 后评论

2 个回答

Polly

interval 部分可以利用 makeUnifiedCall 或者 makeCall 调用函数生成对应元代码。参考脚本:

makeUnifiedCall(funcByName(`interval), [sqlCol(`date), parseExpr(`1d), 0])


请先 登录 后评论
wale
sql(select=sqlCol("val",last), from=t, groupBy=[<st>,<interval(date, 1d, 0) as date >], groupFlag=1).eval()
执行后结果如下:
st	date	last_val
a	2023.08.01	35
a	2023.08.02	34
a	2023.08.03	0
a	2023.08.04	35.79
a	2023.08.05	0
a	2023.08.06	0
a	2023.08.07	33.26
a	2023.08.08	32.88
a	2023.08.09	33.73
a	2023.08.10	31
b	2023.08.01	25
b	2023.08.02	24
b	2023.08.03	22
b	2023.08.04	25.79
b	2023.08.05	0
b	2023.08.06	0
b	2023.08.07	0
b	2023.08.08	0
b	2023.08.09	21
b	2023.08.10	31

请先 登录 后评论
  • 3 关注
  • 0 收藏,363 浏览
  • 提出于 2023-11-25 11:32

相似问题