按固定间隔范围分组

时间:2018-11-20 11:53:13

标签: mysql sql database group-by relational-database

我有时间以Unix格式int存储。我想按1天的间隔(即86400秒)对结果进行分组。

样本数据

timestamp  | state
+++++++++++++++++++
1540427604 | ABC
1540770300 | PQR
1540770050 | PQR
1540751300 | ABC

我想按每个86400的周期对state的计数进行分组,即如果有人问从1540425600(即2018年10月25日)到1540771200(即2018年10月29日),那么输出应为

range                    | state  | count
++++++++++++++++++++++++++++++++++++++++++
1540425600 - 1540512000  |   ABC  | 1
1540684800 - 1540771200  |   ABC  | 1
1540684800 - 1540771200  |   PQR  | 2

我已经尝试了很多东西,但是我认为这是更接近的。

select 
    concat(86400*floor(timestamp /86400), '-', 86400*floor(timestamp/86400) + 86400) as `range` , count(state)
    from MT 
    where timestamp between MINDATE AND MAXDATE
    group by `range` order by `range`;

但是我得到的输出不是以传递的MINDATE开头或以MINDATE的倍数开头...但是它在86400的范围内。我希望范围应该总是以mMINDATE开头,如果这样的记录存在或在多个中分钟* 86400

请帮助。

1 个答案:

答案 0 :(得分:1)

这是工作:

select
concat(min(floor(timestamp / 86400) * 86400), ' - ', max(floor(timestamp / 86400) * 86400) + 86400) as `range`
, state
, count(*)
from t
group by floor(timestamp / 86400), state
order by `range`