【问题标题】:How can I select the last element of a kdb table for a set of unique column combinations?如何为一组唯一列组合选择 kdb 表的最后一个元素?
【发布时间】:2013-05-29 14:43:55
【问题描述】:

我有这个 kdb 表:

ts              ticker eid          bid     ask
--------------------------------------------------
09:30:00.001    TIF    NASDAQ       781700  792500
09:30:00.001    MRVL   BATSX        114500  118200
09:30:00.001    AVP    BATSX        239100  240100
09:30:00.001    AVP    ARCA         238000  239900
09:30:00.002    TIF    ARCA         780400  790400
09:30:00.002    AVP    BATSX        239100  239800
09:30:00.003    TIF    NYSE         783700  784000
09:30:00.003    TIF    ARCA         783400  790400
09:30:00.004    AVP    NYSE         239300  240000
09:30:00.004    TIF    NASDAQ       783500  792500
09:30:00.006    MRVL   BATSX        114500  117600
..

如何选择每个股票代码的最后一行,eid 对?对于这个子集,这将是:

09:30:00.001    AVP    ARCA         238000  239900
09:30:00.002    AVP    BATSX        239100  239800
09:30:00.003    TIF    NYSE         783700  784000
09:30:00.003    TIF    ARCA         783400  790400
09:30:00.004    AVP    NYSE         239300  240000
09:30:00.004    TIF    NASDAQ       783500  792500
09:30:00.006    MRVL   BATSX        114500  117600

【问题讨论】:

    标签: kdb


    【解决方案1】:

    Select without column list 默认情况下会这样做:

    select by ticker,eid form t
    

    【讨论】:

    • 没错,它也更快:对于这个版本,\t 返回 6i,而对于包含 235,400 行的 fby 版本,\t 返回 12i(查询结果为 148 行)。 @user1895961
    【解决方案2】:

    以下应该是您要查找的内容:

    q)select from tbl where i=(last;i) fby ([]ticker;eid)
    

    【讨论】:

    • 你能用英语解释一下i=(last;i)吗?我不明白i 是如何设置的。
    • 有关 fby 的信息,请查看 here。 i 是一个虚拟字段,表示记录的索引。如果您想使用分区表,它会变得有点复杂,请参阅here
    • lastfby 的聚合函数,i 是数据参数吗?为什么分配给i
    • 我明白了,i=where 条件的一部分,而不是分配。有趣的是 where ... = 条件如何与列表一起工作,而不仅仅是一个原子。使用列表时不应该是where i in (...)吗?
    【解决方案3】:

    您可以聚合多个字段。

    select count i by ticker, eid from t
    
    select last ts, last bid, last ask by ticker, eid from t
    

    您必须稍微重新排序列以完全匹配您的输出,但这很简单。

    【讨论】:

      猜你喜欢
      • 2021-08-12
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多