首页 > 解决方案 > 在 kdb 中的表内查询表

问题描述

q凡人同胞!

我在 kdbq+ 中遇到了一个非常不寻常的问题。本质上,我有一个包含一列表格的表格。

下面是名为full_tab

time                          bmm                                                                                                                                                                                                              $
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------$
2020.08.12D00:06:12.049002000 +`offerid`source_id`sub1`impc`question_id`offer`total_click`rpc`revenue`rpm!(789 128 3 149 111 523 1037 852f;70995 70995 70995 70995 70995 70995 70995 70995f;31 31 31 31 31 31 31 31f;1 2 21 1 0N 0N 0N 0N;956 6$
2020.08.12D00:10:48.186445000 +`offerid`source_id`sub1`impc`question_id`offer`total_click`rpc`revenue`rpm!(789 128 3 149 111 523 1037 852f;70995 70995 70995 70995 70995 70995 70995 70995f;31 31 31 31 31 31 31 31f;3 7 55 5 0N 0N 0N 0N;956 6$
2020.08.12D00:15:50.596247000 +`offerid`source_id`sub1`impc`question_id`offer`total_click`rpc`revenue`rpm!(789 128 3 149 111 523 1037 852f;70995 70995 70995 70995 70995 70995 70995 70995f;31 31 31 31 31 31 31 31f;4 10 81 5 0N 0N 0N 0N;956 $
...

列中的每一行bmm都是一个如下所示的表格

offerid source_id sub1 impc question_id offer                                           total_click rpc    revenue rpm
---------------------------------------------------------------------------------------------------------------------------
789     70995     31   1    956         "aaaa"                                          1           0      0       0
128     70995     31   2    698         "bbb"                                           2           0.4    0.8     400
3       70995     31   21   818         "ccc"                                           10          1.0575 10.575  503.5714
149     70995     31   1    941         "ddd"                                           1           0.4    0.4     400
111     70995     31                    "eee"                                           10          1.057  10.575
523     70995     31                    "fff"                                           1           0.4    0.4
1037    70995     31                    "ggg"                                           1           0.4    0.4
852     70995     31                    "hhh"                                           1           0.4    0.4

我想要的是一个如下所示的决赛桌。从full_tab我正在尝试提取time列并从相应的bmm行中提取与bmm[;`rpm]特定相对应的值bmm[;`question_id],对于它下面的情况question_id = 818

time                               q818
---------------------------------------------
2020.08.12D00:06:12.049002000      503.5714
2020.08.12D00:10:48.186445000      510.665
2020.08.12D00:15:50.596247000      533.445
...

我试图使用下面的语句来拉

select time, q818: first each  bmm[;`rpm][;(where each bmm[;`question_id]=818)] from full_tab;

但以上似乎不起作用!:(

标签: kdb

解决方案


我认为您可以使用以下内容:

    q)getQID:{[t;qid] select time,q818:{[t;qid]exec rpm from t where question_id=qid}[;qid]'[bbm] from t}

    q)getQID[full_tab;818]
    time                          q818
    -------------------------------------
    2014.08.30D03:40:50.876084992 503.75
    2008.06.26D08:14:03.717355744 510.665

推荐阅读