kdb - 如何在 KDB 中做一个 between join 子句?
问题描述
假设我有一个表 A,其中包含 bucket_start_date、bucket_end_date、
A
bucket_start_date | bucket_end_date
2015.05.02 | 2015.05.08
2015.05.08 | 2015.05.12
还假设我有一个表 B 列日期,硬币。
A
date | coins
2015.05.02 | 5
2015.05.06 | 11
2015.05.09 | 32
如何在逻辑上看起来像的 kdb 中加入
select A.bucket_start_date, A.bucket_end_date, sum(coins) from A join B where B.date BETWEEN A.bucket_start_date and A.bucket_end_date group by A.bucket_start_date, A.bucket_end_date
所以我希望结果看起来像
bucket_start_date | bucket_end_date | sum(coins)
2015.05.02 | 2015.05.08 | 16
2015.05.08 | 2015.05.12 | 32
解决方案
窗口连接是实现此结果的一种自然方式。下面是一个wj1
可以得到你所追求的功能:
q)wj1[A`bucket_start_date`bucket_end_date;`date;A;(B;(sum;`coins))]
bucket_start_date bucket_end_date coins
---------------------------------------
2015.05.02 2015.05.08 16
2015.05.08 2015.05.12 32
第一个变量是一对日期列表,第一个是开始日期,最后一个是结束日期。
第二个变量是公共列,在这种情况下,您要使用该date
列,因为您正在查看每个日期适合哪个窗口。
第三个和第四个变量包含要连接的简单表,最后(sum;`coins)
是要应用于给定列的函数列表。同样,在这种情况下,您正在对每个窗口中的硬币列求和。
Awj
考虑进入每个区间时的普遍值,而wj1
只考虑每个区间中出现的值。您可以在函数中更改wj1
为wj
以查看差异。
推荐阅读
- ms-access - 错误 VBA 函数
- vba - VBA 代码在 Documents.Open 之后停止
- sql - 如何获取最后插入的 ROW SQL(不是 ID) Jooq
- hadoop - 按大小排列 yarn 正在运行的应用程序
- python - 如何使用 tesseract 4.0 或使用 pytesseract 检测图像中的表格?
- kotlin - Kotlin 从函数中引用全局变量
- reactjs - 为什么我收到警告:函数作为 React 子级无效?
- java - 如何将 Cucumber 测试添加到预先存在的 Gradle 项目 (Java)?
- react-native - 如何分析 react-native 项目生成的发布 apk?
- ios - swift:在集合视图的标签中显示进度