如何统计每一天当中成分股数量?

指数成分股进出表如下图,包含四个字段:指数代码、股票代码、进入日期、出去日期

attachments-2022-07-y9F38Y0C62da50c38f0a0.png

请先 登录 后评论

1 个回答

Juntao Wang

示例代码如下:

N = 100
tmp = table(take(`000001.SH, N) as index_code, take(`60 + format(rand(1..1000, N), "0000"), N) as secu_code, rand(1990.01.01..2000.01.01, N) as indate, rand(2015.01.01..2020.01.01, N) as outdate)

// 方案一
timer {
        tmp2 = cj(tmp, table(1990.01.01..2020.01.01 as dayRange))
        tmp3 = select * from tmp2 context by index_code, dayRange having dayRange >= indate and dayRange <= outdate
        data=select count(*) from tmp3 group by index_code, dayRange
}
// Time elapsed: 665.689 ms

// 方案二
def c1(tmp, idate) { return [sum(idate >= tmp.indate && idate <= tmp.outdate)] }
timer {
        dayRange = 1990.01.01..2020.01.01
        data2 = table(transpose(each(c1{tmp, }, dayRange)).rename!([`count]))
        data2 = data2[data2.count >0 ]
}
// Time elapsed: 86.598 ms
请先 登录 后评论