KDB +:如何在给定的行之前和之后立即检索符合特定逻辑的行?

问题描述

给出下表

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

关于如何实现此目标的一些建议或指示将是很棒的! 谢谢

解决方法

我能够使用以下代码返回满足您要求的表。如果正确,那么您提供的样本表是不正确的,否则我会误解了这个问题。

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,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

正在选择要在最终结果中返回的行。

希望这能回答您的问题。

谢谢, 凯特琳

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...