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