在日期时间戳中分隔日期和时间
Separating date and time in a datetime stamp
我有一个 table 这样的:
我需要以每秒或每分钟的间隔计算总金额。我尝试为此使用 xbar,但我似乎无法将日期和时间与数据分开。
另外我想请问一下,如何添加在规定的时间间隔内汇总账户的命令?
你是对的; xbar 可用于此分组。然后可以使用 sum 函数聚合创建的每个组:
select sum Amount by 1 xbar Time.minute from t
或按时间列分组(时间戳基于整数)。
select sum Amount by Time from t
查看以下详情:
如果你的table是这样的:
q})t: ([] Amount:`int$(); Time:`timestamp$() );
q)show meta t
c | t f a
------| -----
Amount| i
Time | p
并使用以下数据:
q)`t insert (10?100;asc .z.p+10?00:10)
q)show t
Amount Time
------------------------------------
58 2017.09.14D10:44:48.992850000
68 2017.09.14D10:44:48.992850000
45 2017.09.14D10:47:48.992850000
2 2017.09.14D10:48:48.992850000
...
然后您可以使用 xbar 按每分钟间隔对 table 进行分组:
q)select sum Amount by 1 xbar Time.minute from t
minute| Amount
------| ------
10:44 | 126
10:47 | 45
10:48 | 41
10:49 | 113
...
或按 5 分钟间隔分组:
q)select sum Amount by 5 xbar Time.minute from t
minute| Amount
------| ------
10:40 | 126
10:45 | 199
10:50 | 210
或按 5 秒间隔分组:
q)select sum Amount by 5 xbar Time.second from t
second | Amount
--------| ------
10:44:45| 126
10:47:45| 45
10:48:45| 41
10:49:45| 113
...
每个组的“金额”列中的值将相加。
附带说明一下,您还可以按时间列中的不同值进行分组:
q)select sum Amount by Time from t
Time | Amount
-----------------------------| ------
2017.09.14D10:44:48.992850000| 126
2017.09.14D10:47:48.992850000| 45
2017.09.14D10:48:48.992850000| 41
2017.09.14D10:49:48.992850000| 113
2017.09.14D10:51:48.992850000| 122
2017.09.14D10:52:48.992850000| 88
谢谢。
使用 xbar
和 time
(或 timestamp
)数据类型时有一些问题。
1) 每小时分桶数据;您需要将时间转换为小时 hh
,因为 time.hour
在 KDB 中不可用。
q)select sum a by 1 xbar `hh$time from t
2) 以 milli/micro 精度分桶,你需要在参数中使用绝对数字。
q)select sum a by 1000000 xbar time from t
我有一个 table 这样的:
我需要以每秒或每分钟的间隔计算总金额。我尝试为此使用 xbar,但我似乎无法将日期和时间与数据分开。
另外我想请问一下,如何添加在规定的时间间隔内汇总账户的命令?
你是对的; xbar 可用于此分组。然后可以使用 sum 函数聚合创建的每个组:
select sum Amount by 1 xbar Time.minute from t
或按时间列分组(时间戳基于整数)。
select sum Amount by Time from t
查看以下详情:
如果你的table是这样的:
q})t: ([] Amount:`int$(); Time:`timestamp$() );
q)show meta t
c | t f a
------| -----
Amount| i
Time | p
并使用以下数据:
q)`t insert (10?100;asc .z.p+10?00:10)
q)show t
Amount Time
------------------------------------
58 2017.09.14D10:44:48.992850000
68 2017.09.14D10:44:48.992850000
45 2017.09.14D10:47:48.992850000
2 2017.09.14D10:48:48.992850000
...
然后您可以使用 xbar 按每分钟间隔对 table 进行分组:
q)select sum Amount by 1 xbar Time.minute from t
minute| Amount
------| ------
10:44 | 126
10:47 | 45
10:48 | 41
10:49 | 113
...
或按 5 分钟间隔分组:
q)select sum Amount by 5 xbar Time.minute from t
minute| Amount
------| ------
10:40 | 126
10:45 | 199
10:50 | 210
或按 5 秒间隔分组:
q)select sum Amount by 5 xbar Time.second from t
second | Amount
--------| ------
10:44:45| 126
10:47:45| 45
10:48:45| 41
10:49:45| 113
...
每个组的“金额”列中的值将相加。
附带说明一下,您还可以按时间列中的不同值进行分组:
q)select sum Amount by Time from t
Time | Amount
-----------------------------| ------
2017.09.14D10:44:48.992850000| 126
2017.09.14D10:47:48.992850000| 45
2017.09.14D10:48:48.992850000| 41
2017.09.14D10:49:48.992850000| 113
2017.09.14D10:51:48.992850000| 122
2017.09.14D10:52:48.992850000| 88
谢谢。
使用 xbar
和 time
(或 timestamp
)数据类型时有一些问题。
1) 每小时分桶数据;您需要将时间转换为小时 hh
,因为 time.hour
在 KDB 中不可用。
q)select sum a by 1 xbar `hh$time from t
2) 以 milli/micro 精度分桶,你需要在参数中使用绝对数字。
q)select sum a by 1000000 xbar time from t