interval 部分可以利用 makeUnifiedCall 或者 makeCall 调用函数生成对应元代码。参考脚本:
makeUnifiedCall(funcByName(`interval), [sqlCol(`date), parseExpr(`1d), 0])
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不是一个一元函数),谢谢。
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