【问题标题】:How to put multiple where statements into function on kdb+如何在 kdb+ 上将多个 where 语句放入函数中
【发布时间】:2020-12-07 00:48:41
【问题描述】:

我正在尝试使用 kdb+ 编写一个函数,该函数将查看列表,并找到满足两个条件的值。

我们将列表称为 DR(用于数据范围)。我想要一个结合这两个条件的函数 “DR where (DR mod 7) in 2” 和 “DR 其中 (DR.dd) 在 1” 我可以一次应用它们,但我真的需要将它们组合成一个功能。我希望我能做到这一点 “DR 是 (DR.dd mod 7) 在 2 和 DR 其中 (DR.dd) 在 1” 但这显然没有用。有什么建议吗?

【问题讨论】:

    标签: kdb


    【解决方案1】:

    您可以利用and 函数来帮助解决这个问题,这与& 相同:

    q)dr:.z.d+til 100
    q)and
    &
    q)2=dr mod 7
    10000001000000100000010000001000000100000010000001000000100000010000001000000..
    q)1=dr.dd
    00000000000000000000000001000000000000000000000000000000100000000000000000000..
    q)(1=dr.dd)&2=dr mod 7
    00000000000000000000000000000000000000000000000000000000100000000000000000000..
    q)dr where(1=dr.dd)&2=dr mod 7
    2021.02.01 2021.03.01
    

    由于 kdb 如何从右到左读取代码,因此必须将第一部分括在括号中。在 where 子句中执行此操作时,此格式略有变化,由于每个 where 子句的解析方式,不需要括号,即逗号之间的每个子句是单独解析的。然而它本质上和上面的代码做的事情是一样的。

    q)t:([]date:dr)
    q)select from t where 1=date.dd,2=date mod 7
    date
    ----------
    2021.02.01
    2021.03.01
    

    【讨论】:

      【解决方案2】:

      您也可以使用min 来实现类似的结果,如下所示:

      DR where min(1=DR.dd;2=DR mod 7)
      

      【讨论】:

        猜你喜欢
        • 2021-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-16
        • 2012-01-08
        • 1970-01-01
        • 1970-01-01
        • 2014-01-02
        相关资源
        最近更新 更多