按固定间隔范围分组

Group by fixed interval range

我以 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 的范围内。如果这样的记录存在或在多个 MINDATE * 86400

请帮忙。

这里的工作:

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`