2

我有一个表(allsales),其中有一列时间(sale_time)。我想将数据分组sale_time。但我希望能够解决这个问题。例如,时间间隔的任何数据都00:00:00-03:00:00应该组合在一起,03:00:00-06:00:00应该组合在一起等等。有没有办法编写这样的查询?

4

2 回答 2

4

xbar 对于舍入到间隔值很有用,例如

q)5 xbar 1 3 5 8 10 11 12 14 18
0 0 5 5 10 10 10 10 15

然后,我们可以使用它将行分组为时间组,例如:

q)s:([] t:13:00t+00:15t*til 24; v:til 24)

q)s
t            v
--------------
13:00:00.000 0
13:15:00.000 1
13:30:00.000 2
13:45:00.000 3
14:00:00.000 4
14:15:00.000 5
..

q)select count i,sum v by xbar[`int$03:00t;t] from s
t           | x  v
------------| ------
12:00:00.000| 8  28
15:00:00.000| 12 162
18:00:00.000| 4  86

"by xbar[`int$03:00t;t]" 将时间列 t 舍入到最接近的三小时值,然后将其用作分组依据。

于 2013-05-07T18:34:13.543 回答
0

获得相同结果的方法很少。

q)select count i , sum v by t:01:00u*3 xbar t.hh  from s
q)select count i , sum v by t:180 xbar t.minute  from s
t    | x  v
-----| ------
12:00| 8  28
15:00| 12 162
18:00| 4  86

但在所有情况下,date如果表中存在列,请注意列,否则不同日期的同一时间窗口将产生错误的结果。

q)s:([] d:24#2013.05.07 2013.05.08;   t:13:00t+00:15t*til 24; v:til 24)
q)select count i , sum v by d, t:180 xbar t.minute  from s
d          t    | x v
----------------| ----
2013.05.07 12:00| 4 12
2013.05.07 15:00| 6 78
2013.05.07 18:00| 2 42
2013.05.08 12:00| 4 16
2013.05.08 15:00| 6 84
2013.05.08 18:00| 2 44
于 2018-06-12T22:43:55.773 回答