【问题标题】:Separating date and time in a datetime stamp在日期时间戳中分隔日期和时间
【发布时间】:2017-09-14 10:16:45
【问题描述】:

我有一张这样的桌子:

我需要以每秒或每分钟的间隔计算总金额。我尝试为此使用 xbar,但我似乎无法将日期和时间与数据分开。

另外我想问一下,我们如何添加在规定的时间间隔内汇总帐户的命令?

【问题讨论】:

    标签: database kdb


    【解决方案1】:

    你是对的; xbar 可用于此分组。然后 sum 函数可用于聚合创建的每个组:

    select sum Amount by 1 xbar Time.minute from t
    

    或按时间列分组(时间戳是基于整数的)。

    select sum Amount by Time from t
    

    详情见下文:

    如果你的桌子是这样的:

    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 按每分钟间隔对表格进行分组:

    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
    

    谢谢。

    【讨论】:

      【解决方案2】:

      在使用xbar 和time(或timestamp)数据类型时有一些问题。

      1) 每小时分桶数据;您需要将时间转换为小时 hh,因为 time.hour 在 KDB 中不可用。

      q)select sum a by 1 xbar `hh$time from t
      

      2) 以毫/微精度进行分桶,您需要在参数中使用绝对数字。

      q)select sum a by 1000000  xbar time from t
      

      【讨论】:

        猜你喜欢
        • 2013-06-16
        • 1970-01-01
        • 1970-01-01
        • 2013-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-03
        • 1970-01-01
        相关资源
        最近更新 更多