kdb/q:在从分区表中选择时使用函数

kdb/q:在从分区表中选择时使用函数,kdb,Kdb,我正在尝试从一个分区表中跨多个日期获取最大提取。当运行的日期被限制在特定日期时,查询工作正常。例如 select {max neg x-maxs x} pnl from trades where date=last date 它在多个日期内缩小了地图,因此上面的查询不再有效。我可以通过添加另一个聚合使查询在多个日期上运行: select max {max neg x-maxs x} pnl from trades 但它并不是从连续的交易序列中获得最大的提款权,而是每天最大的提款权 我想知道是

我正在尝试从一个分区表中跨多个日期获取最大提取。当运行的日期被限制在特定日期时,查询工作正常。例如

select {max neg x-maxs x} pnl from trades where date=last date
它在多个日期内缩小了地图,因此上面的查询不再有效。我可以通过添加另一个聚合使查询在多个日期上运行:

select max {max neg x-maxs x} pnl from trades
但它并不是从连续的交易序列中获得最大的提款权,而是每天最大的提款权

我想知道是否有一种方法可以让它在不链接选择项的情况下使用单个选择项

select {max neg x-maxs x} pnl from select pnl from trades
我有一个相当大的问题,需要在交易中提取很多不同的指标,其中最大提取只是其中之一。使用链式选择意味着我需要将大查询分为两个查询,map reduced和non-map reduced,然后将它们连接起来,这会使查询看起来很难看


谢谢

选择查询在分区数据库中的每个日期运行,并将函数应用于每个日期值,最后根据调用聚合它们(用户定义函数的行为不同于普通的“q”函数)

所以我不认为你可以把它合并成一个查询。但是,您可以寻找一些方法使查询更通用,并可在不同的场景中重用

例如,将查询转换为函数形式,并在该查询中为列名和用户函数使用变量。将其放在一个函数中,该函数将接受列名和用户函数。现在您可以使用不同的(column;function)集合调用此函数。比如:

runF:{[col;usrfunc]functional\u query\u uses\u col\u userfunc}


所有这些都取决于您的用例。还要检查内存使用情况,因为您将把大量数据放入内存。

选择查询在分区数据库中的每个日期运行,并将函数应用于每个日期值,最后根据调用聚合它们(用户定义函数的行为不同于普通的“q”函数)

所以我不认为你可以把它合并成一个查询。但是,您可以寻找一些方法使查询更通用,并可在不同的场景中重用

例如,将查询转换为函数形式,并在该查询中为列名和用户函数使用变量。将其放在一个函数中,该函数将接受列名和用户函数。现在您可以使用不同的(column;function)集合调用此函数。比如:

runF:{[col;usrfunc]functional\u query\u uses\u col\u userfunc}

所有这些都取决于您的用例。还要检查内存使用情况,因为您将把大量数据放入内存