查询选择N条记录

问题描述

我有一个tab,其列数为 date,sym,value,按从最早到最近的顺序排列。

我正在尝试为每个 N 选择过去的 sym 记录,但不确定此查询。我知道我可以根据 date一个范围内进行选择,但我需要根据 sym 进行选择,无论 value 是否连续出现。

解决方法

您可以使用 const getKeys = (object,string) => Object .keys(object) .filter(k => Object.values(object[k]).some(v => v.includes(string))),foo = { 65: { foo: 'bar',bar: 'amet',dolor: 'foo' },66: { foo: 'foo',bar: 'sit',dolor: 'amet' },70: { foo: 'amet',lorem: 'amet',bar: 'sit' } }; console.log(getKeys(foo,'o')); 和虚拟行号列 fby 执行此操作:

https://code.kx.com/q/ref/fby/

i

编辑:更快的方法是对每个符号使用带有第 5 个参数 n(记录数)的函数式 exec。

q){ select from tab where ({y in x#y}[x];i) fby sym }[-2]

date       sym  time                          src price size
------------------------------------------------------------
2014.04.21 AAPL 2014.04.21D16:29:03.253000000 N   24.98 3561
2014.04.21 AAPL 2014.04.21D16:29:03.558000000 N   24.98 2733
2014.04.21 CSCO 2014.04.21D16:28:56.265000000 O   35.6  8390
2014.04.21 CSCO 2014.04.21D16:29:44.572000000 L   35.61 2286
2014.04.21 DELL 2014.04.21D16:29:35.374000000 L   29.57 1444
2014.04.21 DELL 2014.04.21D16:29:39.979000000 N   29.56 216
2014.04.21 GOOG 2014.04.21D16:29:50.569000000 N   41.87 722
2014.04.21 GOOG 2014.04.21D16:29:58.633000000 O   41.9  437

https://code.kx.com/q/basics/funsql/

,

如果您希望返回表中的所有列,Matt 使用 fby 和功能选择的建议是最好的。如果您只需要返回 datesymprice 列,您可以使用

q)ungroup select -2#date,-2#price by sym from trade
sym  date       price
----------------------
APPL 2021.03.13 111.77
APPL 2021.03.13 111.85
CAT  2021.03.13 246
CAT  2021.03.13 246.27
GOOG 2021.03.13 206.24
GOOG 2021.03.13 206.21
NYSE 2021.03.13 60.67
NYSE 2021.03.13 60.97

请注意,选择大量列时可能会变得繁琐。在这些情况下,最好坚持马特的建议。

相关问答

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