kdb+:具有来自列的两个参数的函数

kdb+:具有来自列的两个参数的函数,kdb,Kdb,我有一个处理日期的函数和一个接受两个参数来执行计算的函数。现在让我们假设它们如下所示: d:{[x] :x.hh} f:{[x;y] :x+y} select f each (columnOne,d[columnTwo]) from myTable 现在我想在查询中使用函数f,如下所示: d:{[x] :x.hh} f:{[x;y] :x+y} select f each (columnOne,d[columnTwo]) from myTable 因此,我首先要使用函数d将一列转换为相应

我有一个处理日期的函数和一个接受两个参数来执行计算的函数。现在让我们假设它们如下所示:

d:{[x] :x.hh}
f:{[x;y] :x+y}
select f each (columnOne,d[columnTwo]) from myTable
现在我想在查询中使用函数f,如下所示:

d:{[x] :x.hh}
f:{[x;y] :x+y}
select f each (columnOne,d[columnTwo]) from myTable
因此,我首先要使用函数d将一列转换为相应的数字。然后,使用column1和d[columnTwo]的输出,我想计算f的结果

显然,上述方法不起作用,因为它会因“排名错误”而失败

我还尝试了从myTable中选择f./:columnOne,'d[columnTwo],这也不起作用

我该怎么做?注意,我需要在f中输入columnOne和columnTwo,以便相应的行仍然匹配。例如,将第1列的第1行和第2列的第1行同时输入f

我还尝试了从myTable中选择f./:columnOne,'d[columnTwo],这也不起作用

你很熟悉这个密码。问题是d函数,特别是函数d中的x.hh,-.hh符号在这种情况下不起作用,您需要改为使用`hh$x,因此d变成:

因此,仅对上述代码进行此更改,我们得到:

q)d:{[x] :`hh$x}
q)f:{[x;y] :x+y}
q)myTable:([] columnOne:10?5; columnTwo:10?.z.t);
q)update res:f ./: (columnOne,'d[columnTwo]) from myTable
    columnOne columnTwo    res
    --------------------------
    1         21:10:45.900 22
    0         20:23:25.800 20
    2         19:03:52.074 21
    4         00:29:38.945 4
    1         04:30:47.898 5
    2         04:07:38.923 6
    0         06:22:45.093 6
    1         19:06:46.591 20
    1         10:07:47.382 11
    2         00:45:40.134 2
我已将“选择”更改为“更新”,以便您可以在结果表中看到其他列

实现相同功能的其他语法:

q)update res:f'[columnOne;d columnTwo] from myTable
    columnOne columnTwo    res
    --------------------------
    1         21:10:45.900 22
    0         20:23:25.800 20
    2         19:03:52.074 21
    4         00:29:38.945 4
    1         04:30:47.898 5
    2         04:07:38.923 6
    0         06:22:45.093 6
    1         19:06:46.591 20
    1         10:07:47.382 11
    2         00:45:40.134 2
唯一值得注意的一点是,在上面的示例中,函数d是向量化的,与向量arg一起工作,如果不是这样,则需要将d[columnTwo]更改为d每个columnTwo或d'[columnTwo]

这将导致以下查询之一:

select res:f'[columnOne;d'[columnTwo]] from myTable
select res:f ./: (columnOne,'d each columnTwo) from myTable
select res:f ./: (columnOne,'d'[columnTwo]) from myTable

我会试试这个。实际上,我的实d函数做了一些其他的事情。我刚刚成功了。这个问题。但这似乎很有帮助。非常感谢。现在我想起来了,我的f和d函数可能都不是基于向量的。因此,两者都需要某种形式的输入。那么语法是如何工作的呢?提前谢谢:没关系,我自己找到了语法,我用一些示例查询更新了您的答案。和你提议的一样。再次感谢: