从KDB中导入的CSV中按月计算的Bin日期值?

从KDB中导入的CSV中按月计算的Bin日期值?,kdb,Kdb,我有一个.csv文件,其中包含以下示例架构: item, date 10,2015.01.01 2,2015.02.01 3,2015.01.15 4,2015.03.01 5,2015.03.01 20,2015.03.01 11,2015.02.01 23,2015.01.21 13,2015.01.31 我希望将项目分为年/月/日,即2015-01、2015-02、2015-03。 我尝试了以下行,但似乎不起作用: select item by 1 xbar date.month fro

我有一个.csv文件,其中包含以下示例架构:

item, date
10,2015.01.01
2,2015.02.01
3,2015.01.15
4,2015.03.01
5,2015.03.01
20,2015.03.01
11,2015.02.01
23,2015.01.21
13,2015.01.31
我希望将项目分为年/月/日,即2015-01、2015-02、2015-03。 我尝试了以下行,但似乎不起作用:

select item by 1 xbar date.month from table
还尝试使用新列更新:

update column: `mm$date from table
似乎导入.csv文件会将字段强制转换为符号。我需要先显式地将其转换回日期类型吗


如何打印具有特定时间/日期条件所包含值的表?

要在读取csv时应用类型,请使用0:如下所示:

q)("ID";enlist ",") 0: `:test.csv
item date
---------------
10   2015.01.01
2    2015.02.01
3    2015.01.15
4    2015.03.01
5    2015.03.01
20   2015.03.01
11   2015.02.01
23   2015.01.21
13   2015.01.31
左边的参数是一个两项列表,ID指定每个列的类型,日期和,指定分隔符,登记指示列标题存在

然后数据可以按月扣压:

q)select item by 1 xbar `month$date from ("ID";enlist ",") 0: `:test.csv
date   | item
-------| -----------
2015.01| 10 3 23 13i
2015.02| 2 11i
2015.03| 4 5 20i
或者,如果您想要自定义大小的存储桶,您可以使用带有日期列表的bin作为存储桶分隔符。这将给出一个整数值,指示每个日期属于哪个bin,然后您可以使用字典来命名存储桶:

q)b:2015.01.01 2015.02.01 2015.03.01
q)d:(0 1 2)!`month$b
q)select item by d b bin date from ("ID";enlist ",") 0: `:test.csv
date   | item
-------| -----------
2015.01| 10 3 23 13i
2015.02| 2 11i
2015.03| 4 5 20i
注:对于第一个分隔符以下的值,bin将指定-1。使用binr将从0开始计数:


谢谢你的回复。我使用了您在value关键字旁边提供的语法,即binByMonth:{value select distinct,x,by 1 xbar'month$date from sample}。打印的值x在符号前面有一个逗号,即,'OP,有没有办法使其成为字符串?'OP表示包含一个项目的列表,即符号OP。要使其成为字符串,请首先提取列表的第一个也是唯一的元素,然后使用字符串将其转换为字符串。所以{string first x}作为一个函数。但是,如果您想动态选择列,功能性选择可能更适合您的需要。
q)b bin 2014.12.31
-1
q)b binr 2014.12.31
0