【问题标题】:KDB Select rows from a table based on one of its column while comparing it to another tableKDB 根据其中一列从表中选择行,同时将其与另一个表进行比较
【发布时间】:2021-08-31 15:56:17
【问题描述】:

我有如下表1。

num value
1 10
2 15
3 20

表2

ver value
1.0 5
2.0 15
3.0 18

输出应如下所示。我需要从 table1 中选择所有行,这样 table1.value

num value
1 10
2 15

我试过了,还是不行。

select from table1 where value <= (exec value from table2)

【问题讨论】:

    标签: kdb


    【解决方案1】:

    从逻辑的角度来看,您要求 kdb 比较的是:

    10 15 20<=5 15 18
    

    因为它们的长度相等,所以 kdb 假设您的意思是成对比较,也就是

    10<=5
    15<=15
    20<=18
    

    它会返回的地方

    q)10 15 20<=5 15 18
    010b
    

    您的实际意思(基于您的预期输出)是10 15 20&lt;=max(5 15 18)。所以在这种情况下,你会想要:

    q)t1:([]num:1 2 3;val:10 15 20)
    q)t2:([]ver:1 2 3.;val:5 15 18)
    q)select from t1 where val<=exec max val from t2
    num val
    -------
    1   10
    2   15
    

    顺便说一句,您不能/不应该有一个名为 value 的列,因为它与关键字冲突

    【讨论】:

      【解决方案2】:

      value 是一个关键字,所以不要分配给它。

      假设您希望 table1 中的所有值都小于 table2 中的 max 值,您可以这样做:

      q)table1:([]num:til 3;val:10 15 20)
      q)table2:([]ver:`float$til 3;val:5 15 18)
      
      q)select from table1 where val<=max table2`val
      num val
      -------
      0   10
      1   15
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-16
        • 2020-07-30
        相关资源
        最近更新 更多