Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 根据日期列表获取每月最后n天_Date_Grouping_Kdb - Fatal编程技术网

Date 根据日期列表获取每月最后n天

Date 根据日期列表获取每月最后n天,date,grouping,kdb,Date,Grouping,Kdb,如何提取日期列表中每个月的最后n天 假设我有以下日期列表: dates:2000.01.01 + til 60 和n:2 我想要的结果是: 2000.01.30 2000.01.31 2000.02.28 2000.02.29 您需要为每个日期建立一个月的字典,然后对它进行分组。完成后,您可以使用操作符。更新:sublist可能是一个更好的运算符,用于处理可能的重复项,这取决于传入的数据 // Build the dictionary/mapping q)dates!`month$dates

如何提取日期列表中每个月的最后
n

假设我有以下日期列表:

dates:2000.01.01 + til 60
n:2

我想要的结果是:

2000.01.30 2000.01.31 2000.02.28 2000.02.29

您需要为每个日期建立一个月的字典,然后对它进行分组。完成后,您可以使用
操作符。更新:sublist可能是一个更好的运算符,用于处理可能的重复项,这取决于传入的数据

// Build the dictionary/mapping
q)dates!`month$dates
2000.01.01| 2000.01
2000.01.02| 2000.01
2000.01.03| 2000.01
2000.01.04| 2000.01

// Group the results
q)group dates!`month$dates
2000.01| 2000.01.01 2000.01.02 2000.01.03 2000.01.04 2000.01.05 2000.01.06 20..
2000.02| 2000.02.01 2000.02.02 2000.02.03 2000.02.04 2000.02.05 2000.02.06 20..

// Act on each month
q)-2#/:group dates!`month$dates
2000.01| 2000.01.30 2000.01.31
2000.02| 2000.02.28 2000.02.29

// Raze the results
q)raze value -2#/:group dates!`month$dates
2000.01.30 2000.01.31 2000.02.28 2000.02.29
总之,您可以通过铸造日期,将日期映射到各自的月份,然后对其进行分组。完成后,您可以提取结果。在对日期进行操作之前,您需要确保对日期进行了排序

我们可以将这一切放在一个很好的函数中,这个函数的不祥名称是
lastDays

q)lastDays:{[dts;n] raze value (neg n)#/:group dts!`month$dts}
q)lastDays[dates;2]
2000.01.30 2000.01.31 2000.02.28 2000.02.29
根据Terry的建议,编辑以利用子列表而不是#

q)lastDays:{[dts;n] raze value sublist/:[neg n;]group dts!`month$dts}
q)lastDays[dates;2]
2000.01.30 2000.01.31 2000.02.28 2000.02.29

您需要为每个日期建立一个月的字典,然后对它进行分组。完成后,您可以使用
操作符。更新:sublist可能是一个更好的运算符,用于处理可能的重复项,这取决于传入的数据

// Build the dictionary/mapping
q)dates!`month$dates
2000.01.01| 2000.01
2000.01.02| 2000.01
2000.01.03| 2000.01
2000.01.04| 2000.01

// Group the results
q)group dates!`month$dates
2000.01| 2000.01.01 2000.01.02 2000.01.03 2000.01.04 2000.01.05 2000.01.06 20..
2000.02| 2000.02.01 2000.02.02 2000.02.03 2000.02.04 2000.02.05 2000.02.06 20..

// Act on each month
q)-2#/:group dates!`month$dates
2000.01| 2000.01.30 2000.01.31
2000.02| 2000.02.28 2000.02.29

// Raze the results
q)raze value -2#/:group dates!`month$dates
2000.01.30 2000.01.31 2000.02.28 2000.02.29
总之,您可以通过铸造日期,将日期映射到各自的月份,然后对其进行分组。完成后,您可以提取结果。在对日期进行操作之前,您需要确保对日期进行了排序

我们可以将这一切放在一个很好的函数中,这个函数的不祥名称是
lastDays

q)lastDays:{[dts;n] raze value (neg n)#/:group dts!`month$dts}
q)lastDays[dates;2]
2000.01.30 2000.01.31 2000.02.28 2000.02.29
根据Terry的建议,编辑以利用子列表而不是#

q)lastDays:{[dts;n] raze value sublist/:[neg n;]group dts!`month$dts}
q)lastDays[dates;2]
2000.01.30 2000.01.31 2000.02.28 2000.02.29

美好的如果可以重复(例如,给定月份中只有一个日期),则在
#
上使用
子列表
可能很有用。另外,我喜欢函数名!很好,假设数据完整性从来都不是一个好主意!很遗憾,这个问题在万圣节前没有被问到,我认为有趣的问题命名是所有程序员的秘密乐趣。如果可以重复(例如,给定月份中只有一个日期),则在
#
上使用
子列表
可能很有用。另外,我喜欢函数名!很好,假设数据完整性从来都不是一个好主意!很遗憾,这个问题在万圣节前没有被问到,我认为有趣的问题命名是所有程序员的秘密乐趣