KDB:xgroup的最后记录
我有一个表,我使用xgroup按某一列进行分组KDB:xgroup的最后记录,kdb,Kdb,我有一个表,我使用xgroup按某一列进行分组 `col1 xgroup Tab 然后我在每个字段中都会得到一个列表 col1 aa bb --------------------------------------------------- 654301841 ("DFIDXARB";"DFIDXARB) ("2018";"2018") 529406294 ("DFIDX
`col1 xgroup Tab
然后我在每个字段中都会得到一个列表
col1 aa bb
---------------------------------------------------
654301841 ("DFIDXARB";"DFIDXARB) ("2018";"2018")
529406294 ("DFIDXARB";"DFIDXARB";"DFIDXARC") ("2018";"2017";"2013")
657471294 ("DFIDVVVB";"DFIDAAAA") ("2018";"2019")
655649664 ("DFIDVVVR";"DFIDAAAX") ("")
如何获取最后的值?如下图所示:
col1 aa bb
---------------------------------------------------
654301841 "DFIDXARB "2018"
529406294 "DFIDXARC" "2013"
657471294 "DFIDAAAA" "2019"
655649664 "DFIDAAAX" ""
您需要使用select…by Q-SQL查询
q) select by col1 from tbl
例如:
q) t:([]id:1 2 1 2 3;v:1 2 3 4 5;n:`a`b`c`d`e)
q) select by id rom t
id| v n
--| ---
1 | 3 c
2 | 4 d
3 | 5 e
您需要使用select…by Q-SQL查询
q) select by col1 from tbl
例如:
q) t:([]id:1 2 1 2 3;v:1 2 3 4 5;n:`a`b`c`d`e)
q) select by id rom t
id| v n
--| ---
1 | 3 c
2 | 4 d
3 | 5 e
另一个好的选择是使用
fby
q)t:([]id:1 2 1 2 3;v:1 2 3 4 5;n:`a`b`c`d`e)
您可以指定第一个或最后一个
q)select from t where i=(first;i)fby id
id v n
------
1 1 a
2 2 b
3 5 e
q)select from t where i=(last;i)fby id
id v n
------
1 3 c
2 4 d
3 5 e
也可以通过索引指定垂直切片
q)select from t where i=(@[;1];i)fby id
id v n
------
1 3 c
2 4 d
另一个好的选择是使用
fby
q)t:([]id:1 2 1 2 3;v:1 2 3 4 5;n:`a`b`c`d`e)
您可以指定第一个或最后一个
q)select from t where i=(first;i)fby id
id v n
------
1 1 a
2 2 b
3 5 e
q)select from t where i=(last;i)fby id
id v n
------
1 3 c
2 4 d
3 5 e
也可以通过索引指定垂直切片
q)select from t where i=(@[;1];i)fby id
id v n
------
1 3 c
2 4 d
与简单的分组方法相比,fby解决方案对于这个特定问题的成本很高,这是因为qsql将这个分组(col的最后一项)视为一个特例,并在内部处理它。但是,对于您提到的按列为特定索引选择行的其他场景,fby很有用(而且通常是正确的方法)。与简单的分组方法相比,fby解决方案对于这个特定问题的成本很高,这是因为qsql将此分组(按列最后一项)视为特殊情况,并在内部处理。但是对于您提到的按列为特定索引选择行的其他场景,fby很有用(而且大多数是正确的方法)。