【问题标题】:KDB+: How to retrieve the rows immediately before and after a given row that conform to a specific logic?KDB+:如何检索符合特定逻辑的给定行之前和之后的行?
【发布时间】:2020-09-04 08:17:36
【问题描述】:

给定下表

time    kind    counter    key1    value
----------------------------------------
1       1       1          1       1
2       0       1          1       2
3       0       1          2       3
5       0       1          1       4
5       1       2          2       5
6       0       2          3       6
7       0       2          2       7
8       1       3          3       8
9       1       4          3       9

如何选择第一行中的值 紧接在每个之后和紧接之前 按时间排序的第 1 行,其中 key1 两个实例中的值相同。即:

time      value       prevvalue     nextvalue
---------------------------------------------
1         1           0n            2
5         5           3             7
8         8           6             0n
9         9           6             0n

以下是我尝试过的一些方法 老实说,我不知道如何规范地实现 在 q 中类似这样的东西,其中先验值具有 当前行的可变偏移量?

select 
     prev[value],
     next[value],
     by key1 where kind<>1

 
     update 0N^prevval,0N^nextval from update prevval:prev value1,nextval:next value1 by key1 from table

关于如何实现这一点的一些建议或指针会很棒! 谢谢

【问题讨论】:

    标签: kdb


    【解决方案1】:

    我能够使用以下代码返回满足您要求的表格。如果正确,说明您提供的示例表不正确,否则我误解了问题。

    q)table:([] time:1 2 3 5 5 6 7 8 9;kind:1 0 0 0 1 0 0 1 1;counter:1 1 1 1 2 2 2 3 4;key1:1 1 2 1 2 3 2 3 3;value1:1 2 3 4 5 6 7 8 9)  
    
    q)tab2:update 0N^prevval,0N^nextval from update prevval:prev value1,nextval:next value1 by key1 from table
    
    q)tab3:select from tab2 where kind=1
      time value1 prevval nextval
      ---------------------------
       1    1              2
       5    5      3       7
       8    8      6       9
       9    9      8
    

    tab2中的更新语句:

      update 0N^prevval,0N^nextval from update prevval:prev value1,nextval:next value1 by key1 from table
    

    只是将 2 列添加到原始表中,每行的前一个值和下一个值。 0^ 正在用空值填充空字段。

    tab3中的select语句:

    tab3:select from tab2 where kind=1
    

    为 kind=1 的行过滤 tab2。

    最后的选择语句:

    select time,value1,prevval,nextval from tab3
    

    正在选择您希望在最终结果中返回的行。

    希望这能回答你的问题。

    谢谢, 凯特琳

    【讨论】:

    • 嘿,Caitlin,感谢您抽出时间和精力提供您的意见,非常感谢。使用诸如您提供的解决方案来解决似乎微不足道,但是它没有考虑规定上一行/下一行不能是 kind=1 的条件
    猜你喜欢
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多